如何覆盖相关领域的干净方法?

时间:2017-01-08 09:44:59

标签: python django django-models django-forms django-admin

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

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

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

所以我已经覆盖了clean(self)的{​​{1}}方法。

Order

问题在于,如果管理员一次设置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_price,则clean方法会引发Order.approved,因为它不知道ValidationError即将发布改变了。

您对如何解决此问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

我认为您应首先检查表单级别,即输入数据。

您的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