Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何覆盖与相关字段相关的clean方法?_Python_Django_Django Models_Django Forms_Django Admin - Fatal编程技术网

Python 如何覆盖与相关字段相关的clean方法?

Python 如何覆盖与相关字段相关的clean方法?,python,django,django-models,django-forms,django-admin,Python,Django,Django Models,Django Forms,Django Admin,我的应用程序中有订单和发票型号订单具有属性已批准。当管理员在Django admin中设置approved=True时,会通知客户他们可以支付订单(Invoice) 问题是,发票具有属性最终价格,必须由管理员设置,管理员才能批准订单 在Django admin中,有发票对象内联到订单对象中。我想允许管理员设置final_price属性并立即设置approved订单 因此,我已经覆盖了Order的clean(self)方法 def clean(self): if self.approved

我的应用程序中有
订单
发票
型号<代码>订单具有属性
已批准
。当管理员在Django admin中设置
approved=True
时,会通知客户他们可以支付订单(
Invoice

问题是,
发票
具有属性
最终价格
,必须由管理员设置,管理员才能批准订单

在Django admin中,有
发票
对象内联到
订单
对象中。我想允许管理员设置
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
从数据库中检索尚未设置的最终_价格

一种方法是在其InlineFormSet本身中验证最终价格。另一种方法是

final_price = input_data.get('final_price')
if self.approved and not final_price:
   # Raise an error

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

您的
self.invoice.final_price
从数据库中检索尚未设置的最终_价格

一种方法是在其InlineFormSet本身中验证最终价格。另一种方法是

final_price = input_data.get('final_price')
if self.approved and not final_price:
   # Raise an error