Odoo 开发常见问题备忘
持续更新,欢迎补充!
一、用法实践(Usage)
- 外部图片url,可通过一个 Html 计算字段在 Form 视图展示
- 【注意】继承模型
__init__
中的声明顺序
二、系统设置(Setting)
- S001: 扩展 res.config.settings ,添加字段属性 config_parameter,可在 Odoo 设置中修改系统参数。
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
appid = fields.Char('AppId', config_parameter='my_module.appid', default='')
secret = fields.Char('小程序 Secret', config_parameter='my_module.secret', default='')
注意 res.config.settings 是瞬态模型,无法持久化存储到数据库,可以通过 related 字段 保存到其他模型的记录中
三、安装
3.1从源码安装 odoo17
环境:阿里云服务器 centos 2核8G
mkdir /root/odoo
cd /root/odoo
git clone -b 17.0 --depth=1 https://gitee.com/mirrors/odoo.git odoo17
mkdir config
mkdir addons
yum install python311
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 运行
python3 ./odoo17/odoo-bin -c /root/odoo/config/odoo.conf &
# 停止
kill -9 $(ps -ef|grep odoo|grep -v grep|awk '{print $2}')
数据库:
yum install postgresql
systemctl enable postgresql
systemctl start postgresql
systemctl status postgresql
postgresql-setup initdb #初始化
sudo -u postgres psql # 修改密码
# 密码登录、外网访问
vi /var/lib/pgsql/data/pg_hba.conf #local all all md5 # host all all 0.0.0.0/0 md5
vi /var/lib/pgsql/data/postgresql.conf # listen_addresses = '*'
配置:odoo/config/odoo.conf 配置示例:
[options]
; without_demo =
addons_path = /root/odoo/odoo17/odoo/addons,/root/odoo/odoo17/addons,/root/odoo/addons
data_dir = /var/lib/odoo
admin_passwd = odoo
;longpolling_port = 8072
;proxy_mode = True ;使用 nginx 开启
; log_level = info
;logfile = /root/odoo/server.log ;输出日志到文件
db_name = jobs
db_user = odoo
db_password = 1122RHvVfDEqOQBpaben
db_port = 5432
db_sslmode = disable
;workers = 3
;max-cron-threads = 1
limit_memory_soft = 1629145600
limit_memory_hard = 1677721600
limit_time_cpu = 600
limit_time_real = 1200
limit_request = 8192
3.2 问题:安装 python-ldap 报错
fatal error: Python.h: No such file or directory
yum groupinstall "Development tools"
yum install openldap-devel python-devel
还报错,解决方案
需要与安装的python一致 => yum install python3.11-devel
四、不符预期
- Odoo16 html 字段如何正确赋值,
r.html_field1 = '<strong>something</strong>' + r.html_field2
前端没有加粗展示。解决方案全部采用f-string方式:r.html_field1 = f'<strong>something</strong>{r.html_field2}'
- Odoo17 自定义权限组,放到人力资源分类下不展示,开启开发者模式可显示。
当前解决方案:
根据__manifest__.py
中设置'name': '招聘小程序', 'category': 'Human Resources/Jobs'
<!--下面组继承上面组-->
<record id="base.module_category_human_resources_jobs" model="ir.module.category">
<field name="name">招聘小程序</field>
<field name="description">招聘小程序用户组</field>
<field name="sequence">1</field>
</record>
<record id="group_job_user" model="res.groups">
<field name="name">普通会员</field>
<field name="category_id" ref="base.module_category_human_resources_jobs"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="group_job_salesman" model="res.groups">
<field name="name">分销员</field>
<field name="category_id" ref="base.module_category_human_resources_jobs"/>
<field name="implied_ids" eval="[(4, ref('group_job_user'))]"/>
</record>
<record id="group_job_admin" model="res.groups">
<field name="name">招聘主管</field>
<field name="category_id" ref="base.module_category_human_resources_jobs"/>
<field name="implied_ids" eval="[(4, ref('group_job_salesman'))]"/>
</record>
互相继承的几个原型
五、异常报错(Error)
-
【无法启动】扩展 res.partner 模型,添加字段后无法启动
- 本地开发可在启动时通过参数 -u [模块名] 进行强制升级
- 不方便使用参数时,可1.先注释掉扩展的字段,2.重启后进入应用升级列表页面,3. 再去掉代码注释,4. 重启找到对应模块手动升级。
-
【无法启动】 AttributeError: ‘Integer’ object has no attribute ‘split’
竟然是 @api.depends() 中字段没加引号导致
-
【报错】TypeError(“‘int’ object is not subscriptable”)
- domain 格式错误没有加()
-
【权限】字段无法编辑,关联字段模型未设置权限
-
【不常见】调用Odoo Api 接口报 404错误
创建了多个数据库,未明确指定使用哪个 -
【样式问题】 Error: Invalid CSS after “$*”: expected 1 selector or at-rule, was
scss 中变量结尾没有加分号’;’ -
【异常】AttributeError: module ‘lib’ has no attribute ‘OpenSSL_add_all_algorithms’ 或报错 has no attribute ‘X509_V_FLAG_NOTIFY_POLICY’
cryptography 和 pyopenssl 两个模块不兼容导致,因此降低cryptography 的版本可解决pip install cryptography==38.0.4
-
【报错】‘RequestHandler’ object has no attribute ‘headers’
大坑
- 没权限菜单不显示:记得添加
security/ir.model.access.csv
- Odoo17 开发建议使用 Python 3.11, 12安装包报错