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

时间:2017-06-01 10:28:18

标签: openerp odoo-9 odoo-10

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

@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)

我在写,更新方法上应用相同的方法它不起作用。它也没有引起任何用户错误。

2 个答案:

答案 0 :(得分:1)

您需要管理一个python约束。请查看有关Odoo约束的内部简要视图。 How to make a constraint on a fields

您的解决方案是:

@api.constrains('contract_lines')
def _check_contract_lines(self):
    if len(self.contract_lines) == 0:
        raise UserError(_("Without Charges, Contract should not be saved"))

当您执行任何操作(如创建,写入或取消链接)时,此约束很快,您将实现目标。

答案 1 :(得分:0)

只要首次保存记录,就会运行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)