-
如果向导模型包含binary字段,则该字段的attachment属性最好设置为False,这样文件内容就是保存到数据库的,之后系统自动删除向导模型数据的时候,文件数据就会被清除。attachment字段默认属性为True,意味着保存到了文件。会导致系统自动删除瞬态模型数据的时候,ir_attachment模型中的文件不会被删除。
-
多条ir attachment记录,如果是同一个文件(MD5值相同),真正的文件只保存一个,其他记录指向这个文件。
-
创建many2one关联字段的时候,要很清楚的知道ondelete属性默认为set null,如果需要级联删除或者阻止删除,要明确的定义。
-
odoo模型的register_hook函数,只做一些初始化的简单工作。
-
在register_hook创建新的env的话,会有一些异常情况发送。创建env的时候,通常伴随着创建连接池,连接池里面的连接,默认是不会关闭的。这样在启用多wroker的情况下,如果某个worker需要重新生成(因为超时退出,或者超过处理次数退出)的时候,系统会fork当前主进程,创建子进程,会导致连接池和连接池里面的连接被复制,当复制的连接在子进程被关闭的时候,会导致主进程的某些连接创建的事务异常。
-
-
所有来源于客户端(xml文件定义或者JS文件定义)的上下文,只能用于客户端(比如xml文件或者JS文件),而不能用于后端python代码。因为如果发生并发更新冲突,odoo的retry语句环境变量是不会携带客户端上下文信息的,如Python代码依赖了上下文做一些判断,会导致retry没有更新数据或者其他逻辑错误,但是retry执行是成功的。
-
如果使用filter的记录集数据量比较大,比如大于1万条,使用search的效率会更高。
-
循环语句中,避免使用search或其他数据库查询操作,应尽量把需要的数据,在循环体外准备好,传入函数。如需要准备的数据数量过多,应加入其他的过滤条件,减少数据数量。
- 对于many2one的字段,都加索引。
- 对于related字段,需要慎重,因为可能导致related字段相关的many2one字段被更新的时候,导致额外的查询,降低写入速度。
- 大批量数据的创建,建议使用queue job异步队列+import service而不是普通的create语句