我有两个模型,一个Invoice模型和一个LineItem模型。LineItem模型看起来像这样:
class LineItem(models.Model):
unit_price = models.DecimalField()
quantity = models.IntegerField()
invoice = models.ForeignKey(Invoice)
@property
def lineitem_total(self): return self.unit_price * self.quantity
Invoice模型还有一个total
属性,该属性返回所有相关行项目的总和。
现在,当与发票相关的行项目更新时,我需要验证发票上的total
属性是否超过了某个最大值。但是,发票上的clean()
方法在相关行项目更新之前触发,因此它仍然返回旧值。我需要在模型本身而不是表单上进行验证。
是否有方法验证行项目?
我尝试过将验证放在Invoice
模型的clean()
方法中,但是total
属性仍然返回行项目更新之前的旧值。
我还尝试过在Invoice
模型的save()
方法中引发ValidationError
,但是返回了500
错误。
1条答案
按热度按时间5n0oy7gb1#
您可以在
LineItem
模型表单中这样尝试(代码注解中的解释):更多信息可以在文档中找到。