在Odoo专栏中,我们分享了很多技术文章,也不禁在思考:有哪些点是需要我们注意,却又很容易忽略的呢?这也是做Odoo开发时非常重要的内容,毕竟一个小bug,真的很磨人啊!

所以本期想分享一下做开发时,需要注意哪些问题~整理的或许并不全面,欢迎大家多多补充!
希望我们能一起规避更多的坑!

1、通过脚手架搭建项目框架:python odoo-bin scaffold 项目名称 工程目录
eg:在example目录下建立demo项目: python odoo-bin scaffold demo example

2、建立odoo.conf文件,配置以下参数:

;管理员主控密码,用于创建、还原和备份数据库等
admin_passwd = admin
;数据库主机名
db_host = localhost
;数据库端口号,postgresql默认端口号为5432
db_port = 5432
;数据库用户名
db_user = username
;数据库用户密码
db_password = userpassword
;addons模块的查找路径
addons_path = ./addons, ./example
timezone = Asia/Shanghai

3、如果自定义widget、视图样式等,需要在templates.xml中引用

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <template id="assets_end" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script src="/demo/static/src/js/change_form_controller.js" type="text/javascript"/>
            <link href="/demo/static/src/scss/deo.scss" rel="stylesheet" type="text/scss"/>
        </xpath>
    </template>
</odoo>

4、如果需要额外依赖其他模块或改造qweb后,在__manifest__.py中引用

'depends': ['base',  'account'],
'qweb': ['static/src/xml/change_demo.xml'],

5、修改权限文件ir.model.access.csv之后,需要重新启动服务,否则不生效。

6、修改js、css等静态文件不用重新启动服务,只需要刷新页面。

7、修改xml文件后如果不想升级,可以在odoo-bin启动文件Parameters增加以下配置,这样只刷新页面就能达到升级效果。

--dev=xml -c

8、当ORM可以实现的时候尽量使用ORM而不要直接写SQL语句,因为它可能会绕过ORM的一些规则如权限、事务等,还会让代码变得难读且不安全。

9、Odoo有自己的事务处理机制,不用手动提交事务。

10、Odoo的计算字段默认不存库。

11、如果扩展Odoo底层的res.user表,需要手动在数据库中增加扩展字段,再进行升级,否则升级报错。

12、使用@api.onchange注解,可以监听当前字段,但只有在页面上修改才会触发,后台修改不会触发。

13、使用@api.depends注解,要加上所有的依赖字段,页面修改或者后台修改都会触发,需要保存后才显示修改后的结果。

14、创建一个Model或者TransientModel类型的py文件,需要在相应的__init__.py引用,并且在权限文件ir.model.access.csv赋予权限;创建一个AbstractModel类型的py文件只需要在__init__.py引用,不用赋予权限。

15、如果修改qweb新建按钮,那么该按钮对应的方法前要加上@api.model注解