模型方法中的以下关系(django)
我正在就我的具体实施寻求一些建议;我定义了发票和行项目模型(如下)。我的发票模型包含一个“发票总额”方法,该方法将与特定发票相关的所有行项目的行总额相加,从而得出发票总成本 这很管用。我只是想听听关于这是否是一个好的设计,或者是否有更好的方法来实现这一点的建议模型方法中的以下关系(django),django,django-models,Django,Django Models,我正在就我的具体实施寻求一些建议;我定义了发票和行项目模型(如下)。我的发票模型包含一个“发票总额”方法,该方法将与特定发票相关的所有行项目的行总额相加,从而得出发票总成本 这很管用。我只是想听听关于这是否是一个好的设计,或者是否有更好的方法来实现这一点的建议 class Invoice(models.Model): invoice_number = models.CharField(max_length=30) invoice_date = models.DateField()
class Invoice(models.Model):
invoice_number = models.CharField(max_length=30)
invoice_date = models.DateField()
def __unicode__(self):
return 'invoice %s issued on %s' % (self.invoice_number, self.invoice_date)
def invoice_total(self):
total = 0
for each in self.lineitem_set.all():
total = total + each.line_total()
return total
class LineItem(models.Model):
description = models.CharField(max_length=50)
unit_price = models.DecimalField(max_digits=9, decimal_places=2)
quantity = models.PositiveSmallIntegerField()
invoice = models.ForeignKey(Invoice)
def __unicode__(self):
return '%s, QTY %s @ %s' % (self.description, self.quantity, self.unit_price)
def line_total(self):
return self.unit_price * self.quantity
这样做是可以的。虽然一开始使用
发票
来计算总额似乎有些尴尬,但它可以代替行项目
,让您在将来决定向总额中添加税费和折扣时扩展模型。如果这样做,您可能还希望将总计
存储在发票
类中
另外,另一个建议是将LineItem
中的invoice
属性更改为
invoice = models.ForeignKey(Invoice, related_name='lineitems')
现在,在
Invoice
类中,您可以将其称为self.lineitems
,而不是self.lineitem\u set
。只是一个建议。关于“相关名称”的观点很好。如果我确实想将所有行项目的总计保存到“总计”字段中。我猜我可以用发票总额法来做?我是否只需要self.total=total
然后self.save()
?是的,没错。在行项目上,您可以使用保存触发器更新发票上的总额。您还需要将total
定义为total=models.something…
再次建议覆盖save。