我的应用程序中有Order
和Invoice
模型。 Order
具有属性approved
。当管理员在 Django-admin 中设置approved=True
时,客户会收到他们可以支付订单的通知(Invoice
)。
问题是Invoice
具有属性final_price
,管理员必须先设置该属性,然后管理员才能批准订单。
在 Django-admin 中,Invoice
对象内联到Order
对象中。我想允许管理员设置final_price
属性并立即设置approved
顺序。
所以我覆盖了Order
的clean(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_price
和Order.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