2017-01-08 54 views
1

在我的應用程序中有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一次,清潔方法會引發ValidationError,因爲它不知道Invoice即將被改變。

你有什麼建議如何解決這個問題?

回答

0

我認爲你應該首先檢查表單層次,即輸入數據。

self.invoice.final_priceself.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