我正在就具体实施提出一些建议;我定义了Invoice和LineItem模型(如下所示)。我的发票模型包含'invoice_total'方法,该方法汇总与特定发票相关的所有订单项的总计,并为我提供总发票费用。
这很好用。如果这是一个好的设计,或者是否有更好的方法来实现这一点,我只是在听取一些建议?
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
答案 0 :(得分:0)
这样做是可以的。虽然最初使用Invoice
计算总数而不是LineItem
似乎很尴尬,但如果您决定在总计中添加税金和折扣,则可以在将来扩展模型。如果您这样做,您可能还希望将total
存储在Invoice
课程中。
另外,另一个建议是将invoice
中的LineItem
属性更改为
invoice = models.ForeignKey(Invoice, related_name='lineitems')
现在,在Invoice
课程中,您可以将其称为self.lineitems
而不是self.lineitem_set
。只是一个建议。