覆盖创建方法以限制用户根据条件 Odoo13 创建新记录
Override create method to Restrict user from creating a new record based on condition Odoo13
我想限制用户根据特定条件在模型上创建新记录。例如,我在模型中有两个字段,它们都是 Integer (move_item_count,item_number ) 并且它们是计算字段,我计算它们的值。如果他们 move_item_count != item_number 我应该阻止用户创建记录并引发错误消息。这是我的代码,它给我这个错误 'NoneType' object has no attribute 'id'。
这是我的代码:
# Overriding the Create Method in Odoo
@api.model
def create(self, vals):
# overriding the create method to add the sequence and prevent the user from
# creating a new record if a condition didn't fulfilled
for rec in self:
if rec.move_item_count != rec.item_number:
raise UserError(_("Some Item Are Missing."))
if vals.get('name', _('New')) == _('New'):
vals['name'] = self.env['ir.sequence'].next_by_code('move.sequence') or _('New')
result = super(LogisticMove, self).create(vals)
return result
在对记录的创建应用约束时,不 推荐覆盖创建,因为当 2 个或更多模块覆盖相同的创建时,这会变得非常混乱。您最好使用实际约束(例如,参见文档 right here)。
如果您觉得必须这样做,请记住,在调用实际创建(超级)之前,记录不在数据库中,也不存在于自身中。您所需要的只是用于创建它的值,这些值存储在您的 vals
参数中。
如果您检查这些值,您可以进行比较并向用户提供反馈。
我想限制用户根据特定条件在模型上创建新记录。例如,我在模型中有两个字段,它们都是 Integer (move_item_count,item_number ) 并且它们是计算字段,我计算它们的值。如果他们 move_item_count != item_number 我应该阻止用户创建记录并引发错误消息。这是我的代码,它给我这个错误 'NoneType' object has no attribute 'id'。
# Overriding the Create Method in Odoo
@api.model
def create(self, vals):
# overriding the create method to add the sequence and prevent the user from
# creating a new record if a condition didn't fulfilled
for rec in self:
if rec.move_item_count != rec.item_number:
raise UserError(_("Some Item Are Missing."))
if vals.get('name', _('New')) == _('New'):
vals['name'] = self.env['ir.sequence'].next_by_code('move.sequence') or _('New')
result = super(LogisticMove, self).create(vals)
return result
在对记录的创建应用约束时,不 推荐覆盖创建,因为当 2 个或更多模块覆盖相同的创建时,这会变得非常混乱。您最好使用实际约束(例如,参见文档 right here)。
如果您觉得必须这样做,请记住,在调用实际创建(超级)之前,记录不在数据库中,也不存在于自身中。您所需要的只是用于创建它的值,这些值存储在您的 vals
参数中。
如果您检查这些值,您可以进行比较并向用户提供反馈。