2017-01-08 14 views
1

私のアプリにはOrderInvoiceモデルがあります。 Orderの属性はapprovedです。管理者がDjango-adminにapproved=Trueを設定すると、顧客は注文(Invoice)を支払うことができることを通知されます。関連するフィールドに関してクリーンメソッドをオーバーライドする方法はありますか?

にはfinal_priceという属性があり、管理者が注文を承認する前に管理者が設定しなければならないという問題があります。

Django-adminには、オブジェクトがOrderオブジェクトにインライン展開されています。私は管理者がfinal_price属性を設定し、approvedの注文をすぐに設定できるようにします。

clean(self)メソッドを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_priceOrder.approvedを設定した場合、それはInvoiceが変更されようとしていることを知らないため、クリーンな方法はValidationErrorを上げることです。

この問題を解決する方法はありますか?

答えて

0

まず、フォームレベル、つまり入力データを確認してください。

self.invoice.final_priceは、まだ設定されていないデータベースからfinal_priceを取得します。

1つの方法は、そのInlineFormSet自体のfinal_priceを検証することです。別の方法が得られるでしょう

final_price = input_data.get('final_price') 
if self.approved and not final_price: 
    # Raise an error 
関連する問題