odoo编程最佳实践

  1. 如果向导模型包含binary字段,则该字段的attachment属性最好设置为False,这样文件内容就是保存到数据库的,之后系统自动删除向导模型数据的时候,文件数据就会被清除。attachment字段默认属性为True,意味着保存到了文件。会导致系统自动删除瞬态模型数据的时候,ir_attachment模型中的文件不会被删除。

  2. 多条ir attachment记录,如果是同一个文件(MD5值相同),真正的文件只保存一个,其他记录指向这个文件。

  3. 创建many2one关联字段的时候,要很清楚的知道ondelete属性默认为set null,如果需要级联删除或者阻止删除,要明确的定义。

  4. odoo模型的register_hook函数,只做一些初始化的简单工作。

    1. 在register_hook创建新的env的话,会有一些异常情况发送。创建env的时候,通常伴随着创建连接池,连接池里面的连接,默认是不会关闭的。这样在启用多wroker的情况下,如果某个worker需要重新生成(因为超时退出,或者超过处理次数退出)的时候,系统会fork当前主进程,创建子进程,会导致连接池和连接池里面的连接被复制,当复制的连接在子进程被关闭的时候,会导致主进程的某些连接创建的事务异常。

  5. 所有来源于客户端(xml文件定义或者JS文件定义)的上下文,只能用于客户端(比如xml文件或者JS文件),而不能用于后端python代码。因为如果发生并发更新冲突,odoo的retry语句环境变量是不会携带客户端上下文信息的,如Python代码依赖了上下文做一些判断,会导致retry没有更新数据或者其他逻辑错误,但是retry执行是成功的。

  6. 如果使用filter的记录集数据量比较大,比如大于1万条,使用search的效率会更高。

  7. 循环语句中,避免使用search或其他数据库查询操作,应尽量把需要的数据,在循环体外准备好,传入函数。如需要准备的数据数量过多,应加入其他的过滤条件,减少数据数量。

  8. 对于many2one的字段,都加索引。
  9. 对于related字段,需要慎重,因为可能导致related字段相关的many2one字段被更新的时候,导致额外的查询,降低写入速度。
  10. 大批量数据的创建,建议使用queue job异步队列+import service而不是普通的create语句
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值