You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:58:28