覆盖创建方法以限制用户根据条件 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 参数中。

如果您检查这些值,您可以进行比较并向用户提供反馈。