我的code
字段有一个唯一约束。当我点击'复制'下拉操作中的选项我收到验证错误。
有没有办法使用'复制'即使字段code
是唯一的?
class sample(models.Model):
_name = 'sample'
code=fields.Char('Code',required=True)
name=fields.Char('Name',required=True)
_sql_constraints = [
('code_uniq', 'unique (code)', 'The code must be unique !')
]
答案 0 :(得分:2)
是的,确实如此。你有两种方法可以做到这一点。复制记录时,会调用copy
方法,并使用原始记录的值创建新记录(它只复制参数copy=True
的字段值 - 默认为真 - )。因此,您可以在code
字段声明中更改该参数,或修改copy
方法以避免相同的复制。
方式1:修改代码字段的副本参数
这种方式最简单,但如果需要code
字段,则会出错。
class sample(models.Model):
_name = 'sample'
code = fields.Char('Code', required=False, copy=False)
name = fields.Char('Name', required=True)
_sql_constraints = [
('code_uniq', 'unique (code)', 'The code must be unique !')
]
方式2:修改模型的副本方法示例
如果必须code
,这就是您要找的方式。
class sample(models.Model):
_name = 'sample'
code = fields.Char('Code', required=True)
name = fields.Char('Name', required=True)
_sql_constraints = [
('code_uniq', 'unique (code)', 'The code must be unique !')
]
@api.one
def copy(self, default=None):
if default is None:
default = {}
new_code = (self.code + ' (copy)') if self.code else ''
default.update({
'code': new_code,
})
new_sample = super(sample, self).copy(default=default)
return new_sample