亲爱的,我想让记录是唯一的,我通过SQL约束做到了,它运行得很好,防止了我进行任何复制,
现在我需要做一个更高级的方法,在创建记录时检查名称并搜索整个记录,所以如果我找到了它,应该返回一个带有原始记录id 的表单视图的操作
这就是我所做的。
testt = fields.Text(string="", compute='open_duplicates', required=False, )
@api.depends('name','id_num')
def open_duplicates(self):
duplicated = self.env['muk_dms.directory'].search([('name','=', self.name)])
if duplicated:
print('inn')
return {
'view_type': 'form',
'view_mode': 'form',
'res_model': 'muk_dms. directory',
'target': 'current',
'res_id': duplicated.id,
'type': 'ir.actions.act_window',
}
else:
pass
现在,如果我输入了一个已经退出的名称,该方法将运行并打印"inn",但它不会返回操作
那么我该怎么做呢??
任何帮助都将不胜感激!!
在odoo中,有两种方法可以防止创建重复记录。1( 。给定sql约束2( 。python约束
你可以一次给出一个约束条件。
如果你给SQL约束比不需要给python约束
如果您想在用户创建重复记录时发出警告,您可以给予python约束。
参见以下示例
@api.constrains('name', 'state')
def _check_name(self):
for field in self:
if field.state == 'manual' and not field.name.startswith('x_'):
raise ValidationError(_("Custom fields must have a name that starts with 'x_' !"))
try:
models.check_pg_name(field.name)
except ValidationError:
msg = _("Field names can only contain characters, digits and underscores (up to 63).")
raise ValidationError(msg)