我的应用中有Order
和Invoice
个型号。 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
即将发布改变了。
您对如何解决此问题有任何建议吗?
答案 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