如何覆盖相关字段的清理方法



我的应用程序中有OrderInvoice模型。 Order具有属性approved。当管理员在 Django-admin 中设置approved=True时,客户会收到他们可以支付订单的通知(Invoice)。

问题是Invoice具有属性final_price,管理员必须先设置该属性,然后管理员才能批准订单。

在 Django-admin 中,Invoice对象内联到Order对象中。我想允许管理员设置final_price属性并立即设置approved顺序。

所以我覆盖了Orderclean(self)方法。

def clean(self):
    if self.approved and not self.invoice.final_price:
        raise ValidationError(_("Invoice final price has to be set on approved order!"))

问题是,如果管理员一次设置Invoice.final_priceOrder.approved,则 clean 方法会引发ValidationError,因为它不知道Invoice即将更改。

你有什么建议如何解决这个问题吗?

我认为您应该首先在表单级别(即输入数据)进行检查。

您的self.invoice.final_price从尚未设置的数据库中检索final_price。

一种方法是在其InlineFormSet本身中验证final_price。另一种方式是获得

final_price = input_data.get('final_price')
if self.approved and not final_price:
   # Raise an error

最新更新