1. Date类型字段给了默认值为当天,但是创建的时候与实际时间相隔一天(并不是时区的问题),如下:
这张图片为2月10日创建,默认值却是2月9日。
解决方法:
2.many2many字段保存后会自动排序,导致后续生成的明细无法按照自己的意图来,如下
具体码数字段原来关联了8,9,10,编辑然后添加1,2,3,保存后该字段会自动排序又变成1,2,3,8,9,10,此处应该是自动按照id来重排了(给该字段的关联模型添加_order属性使之无序也尝试过了,没用),很多时候我们不需要这样的自动排序(如我本想按照8,9,10,1,2,3的顺序遍历这个字段,但是它自动排序后遍历的顺序就变了)。
解决方法:新增加一个表,里面有两个字段,一个整数型,记录顺序;一个多对一,关联具体码数。然后使销售这个表多对多这个新表,就能将我们具体码数的选择顺序记录在这个新表中,因为调用write方法时,具体码数中的值还是按照我们选择的顺序来排的,它在保存之后才会自动按id来排,所以我们在write之前可以将这个顺序数据写进新表里,之后遍历新表就可以了。
3.kanban视图的继承
上方红色框内必须为extension,否则无效
元素标签的隐藏用上面两个方法均可
4.跳转至向导后,修改明细字段,当一条明细某个字段值为空时,该明细会直接删除
原因:工序字段设置了required="1",这种字段编辑后未填,向导模型并不会提示必填没填,而是会直接删除掉此数据。
解决方法:删除掉此字段的required="1"后即可解决问题。
5.将一个服务器的数据库复制到另外一个服务器上,登录后出现白屏如下
原因:odoo数据库里面的一些静态数据或者附件会存在一个以该数据库命名的文件夹中,当你移动、复制这个库到另外一个服务器上之后,如果你把这个数据库的名称改掉,它就会找不到这些静态文件,查看日志会有以下错误提示
解决方法:复制的数据库名称保持和原来一样即可解决
其他白屏问题现象:
备份出来的数据库在恢复到其他数据库上后,登录odoo显示空白页(非网络问题)。刷新,重启等方式都无法解决,经查找资料发现是由于静态css文件是存储在数据库之外的,数据库备份时静态文件和css文件不会一起备份,所以当还原数据库后,页面出现空白是由于静态文件路径是指定的,但是本地又没有,找不到导致的。
解决方法:
DELETE FROM ir_attachment WHERE url LIKE '/web/content/%';
执行完毕后,重启数据库服务以及odoo服务。
重启服务,升级base模块
然后还可能存在模块图标消失的问题,升级web模块
6.当我们给一些系统基础表,如res_partner,res_user,base这些表添加字段,会出现无法重启的情况,页面Internal Server Error 500,后台提示res_partner没有某某字段(还没升级当然没有,你倒是给我个升级的机会啊,在pycharm的启动器里添加-u 模块名也没法解决)。
解决方法:
a.新创建一个模块,将继承写到这个单独的模块里面,然后安装即可。此方法缺点:下次再需要在这个表添加新字段,还得新建模块。
b.直接去数据库找到这个表,给该表直接插入字段,简单粗暴,sql语句:
ALTER TABLE table-name ADD COLUMN cloumn-name varchar;
table-name为表名,cloumn-name为字段名, varchar为字段类型(根据实际需求来)
插入完成后,再重启服务就不会报错了。
7.tree视图字段添加装饰器atrrs="{'invisible':[('state', 'in', ('done', 'cancel'))]}"时,字段会隐藏值而不是隐藏整个字段,如果添加invisible="1"则是隐藏字段,如下
8.不可空继承。我在模块升级报错,提示如下
提示为某个xml文件上的视图出错,一开始以为是那个xml文件里多了个字符或者少了个字符啥的,然后仔细检查了那个xml文件好几遍也没有发现,然后进断点发现不是这个xml的问题,而是另外一个继承于此xml视图的问题。
原因:不可空继承。继承视图后,一定得写一些东西,而不是只继承,不写,如下。
9.docker-compose启动报错
windows上用docker-compose拉容器报错,提示如下
解决方法
10.数据库迁移问题解决方案,问题5的扩展
当出现白屏或者以下错误时:
原因:某某css加载失败,因为数据库迁移以后,ir_attachment表中存储的静态文件路径仍然是原路径,新环境中查找不到,然后就会报错
解决方法:删除ir_attachment表中的'url'字段以'/web/content'开头的所有数据
delete from ir_attachment where url ilike '/web/content/%';
然后升级base模块,问题解决
12.odoo域
search里面的domain,sale_ids是many2many字段,sale是单个单据,此时使用in也是可以的,可以匹配到sale_ids包含sale的。
13.点按钮弹出来的页面无法中的tree无法按照模型的_order属性或者tree视图上的default_order属性排序,需要手动排序后返回
14.计算方法和onchange方法里面尽量不上调用unlink(),调用后之前给表单赋值的操作会失效,尽可能其他等效果的方式来实现删除功能;unlink()应当在赋值之前进行,如果先赋值,后执行unlink,则赋值会失效,如:
self.qty = 10
self.partner_id.unlink()
则删除执行完成之后,self.qty并不等于10,而是变成0
15.related字段不支持数据导入更新,但是添加readonly=False后可以支持导出,导入更新数据
而且同时添加了store=True和readonly=False后,页面上编辑该字段,起related的源字段上的该属性也会一同变化,如上图中的材质字段material,我在当前模型中编辑此字段后,product_id表中的此属性会一同变化。
16.related字段可作为search方法的搜索条件(不加store=True也可以),计算字段不可作为search方法的搜索条件(除非加store=True)
17.模型one2many自己
_parent_name = "location_id"
给类添加此属性,类就可以one2many自己,具体可参考源生stock.location模型
18.browse方法,即使数据id不存在,也不会报错或者提示
比如 product_id = self.env['product.product'].browse(111111)
即使这个id 111111不存在,这行代码也不会有问题,而且还能用他来个其他字段赋值,如
self.product_id = product_id.id
当然,赋值完成后会报错,因为压根不存在这个id的产品
所以这个方法的使用最好搭配上exists方法,如下
if not order_id.exists():
raise UserError('产品不存在!')
19.docker容器down掉重新up后,odoo服务一直报错:KeyError: 'ir.http'
down掉服务后,重新up可能会报这个错误,这时需要将docker-compose里面的数据卷和服务名称改一下,由odoonetwork80 改成odoonetwork81
可能原因:服务重启拉起以后由于原来的networks已被占用,所以这里重新建一个就不会报错了
20.compute字段,没加store=True也无法进页面自动计算。
开始找了各种原因,最后发现是因为字段设置了company_dependent=True,导致无法运算
将company_dependent改成False即可
21.odoo新添加的css样式升级以后没有加载成功,刷新,重启都没有效果。
解决方法: ctrl+F5 (加载后台资源刷新,不同于直接F5刷新)
22.self.env.ref('#视图id') 这种方式读取视图数据会用到 ir.ui.view这个模型的read权限;当用户没有这个权限,但进行的操作里面有涉及到读视图的这个方法,就会引发权限错误,报错如下
解决方法:
a.给予该用户此权限
b.方法开始之前先加上以下代码,意思是超级用户执行逻辑
self = self.with_user(self.env.user).sudo()