Openerp 如果合同没有费用,则引发用户错误

Openerp 如果合同没有费用,则引发用户错误,openerp,odoo-9,odoo-10,Openerp,Odoo 9,Odoo 10,在创建合同时,如果合同没有任何合同行,则不应创建合同。如果创建了合同,并且在编辑所有合同行时必须删除,则不应更新合同并引发用户错误。我解决了第一个条件,但不知道如何解决第二个条件。这是我的密码。谢谢 @api.model def create(self, vals): if len(vals['contract_lines']) == 0: raise UserError(_("Without Charges, Contract should not be saved")

在创建合同时,如果合同没有任何合同行,则不应创建合同。如果创建了合同,并且在编辑所有合同行时必须删除,则不应更新合同并引发用户错误。我解决了第一个条件,但不知道如何解决第二个条件。这是我的密码。谢谢

@api.model
def create(self, vals):
    if len(vals['contract_lines']) == 0:
        raise UserError(_("Without Charges, Contract should not be saved"))
    return super(transport, self).create(vals)
我在写,更新方法上应用了同样的方法,但它不起作用。它也不会引发任何用户错误。

每当第一次保存记录时,都会运行create方法。记录的任何后续保存都是通过write方法处理的,因此您还需要对其进行扩展

# Note the API call is multi, not model
@api.multi
def write(self, vals):
    # I'm not sure if the update is passed through self or vals,
    # so you may need to test this a bit.
    if not self.contract_lines or len(vals['contract_lines']) == 0:
        raise UserError(_("Without Charges, Contract should not be saved"))
    return super(transport, self).write(vals)

您需要管理一个python约束。请查看内部关于Odoo约束的简要视图

您的解决方案是:

@api.constrains('contract_lines')
def _check_contract_lines(self):
    if len(self.contract_lines) == 0:
        raise UserError(_("Without Charges, Contract should not be saved"))
当您执行任何操作(如创建、写入或取消链接)时,此约束将被激活,您将实现目标。

将不会有VAL传递到此约束中,尽管有吗?我喜欢这个解决方案,但它不是自我合同吗?