Odoo开发中create()报错:需传2个参数但仅传1个的问题求助
分析与解决:create()参数不匹配错误问题
先看你碰到的报错:
"create() takes exactly 2 arguments (1 given)"
再对照你的代码:
@api.model @api.constrains('xyz') def create(self,values,**kwargs): res = super(Project, self).create(values) return res
错误原因
核心问题是你错误地给create方法加上了@api.constrains('xyz')装饰器。
@api.constrains是用来定义字段约束校验的装饰器,它对应的方法只需要接收self参数即可——Odoo在触发约束校验时,只会给这类方法传入self。但你把它套在了create方法上,导致Odoo在执行约束逻辑时调用create,只传了self,可你的方法定义要求必须传self和values两个参数,自然就抛出了参数不匹配的错误。
另外还有个小细节:Odoo原生的create方法签名里不需要**kwargs,多余的这个参数也可能带来潜在的调用问题。
解决方法
把@api.constrains('xyz')从create方法上移除,如果你需要对xyz字段做约束校验,单独写一个方法来处理就好:
@api.model def create(self, values): res = super(Project, self).create(values) return res # 单独定义xyz字段的约束校验方法 @api.constrains('xyz') def _check_xyz_constraint(self): for record in self: # 这里写你的校验逻辑,举个例子: if not record.xyz: raise ValidationError("XYZ字段不允许为空!")
这样修改后,create方法恢复了正确的签名,字段约束也能正常触发,参数不匹配的问题就解决了。
内容的提问来源于stack exchange,提问作者Sachin Burnawal
相关产品推荐
相关产品推荐

