在 Odoo 11 中复制记录时,唯一约束会导致错误
Unique constraints cause error when duplicating record in Odoo 11
我的 code
字段有唯一约束。当我在下拉操作中单击 'duplicate' 选项时,出现验证错误。
有什么方法可以使用 'duplicate' 即使字段 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 !')
]
是的,是的。你有两种方法可以做到这一点。当你复制一个记录时,copy
方法被调用,它用原始记录的值创建一个新记录(它只复制参数 copy=True
的字段的值 - 默认情况下是 真-)。因此,您可以在 code
字段声明中更改该参数,或修改 copy
方法以避免相同的复制。
方式一:修改code字段的copy参数
这种方式是最简单的方式,但如果 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 !')
]
方式二:修改模型的copy方法sample
如果必须 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
我的 code
字段有唯一约束。当我在下拉操作中单击 'duplicate' 选项时,出现验证错误。
有什么方法可以使用 'duplicate' 即使字段 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 !')
]
是的,是的。你有两种方法可以做到这一点。当你复制一个记录时,copy
方法被调用,它用原始记录的值创建一个新记录(它只复制参数 copy=True
的字段的值 - 默认情况下是 真-)。因此,您可以在 code
字段声明中更改该参数,或修改 copy
方法以避免相同的复制。
方式一:修改code字段的copy参数
这种方式是最简单的方式,但如果 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 !')
]
方式二:修改模型的copy方法sample
如果必须 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