假设我有一个交易列表,其模型定义如下:
现在我想在月底为每个客户创建发票。发票模型如下所示:
我知道使用批量创建可以在1个查询中创建所有发票,但我仍然需要逐个设置交易模型中的发票字段。
是否可能在创建所有发票后,使用单个查询设置所有Transaction模型的发票字段?最好使用ORM,但如果需要也可以使用原始SQL。
我知道也可以在交易列表上按客户分组以获得每个客户的总额,但是这样的话,各个条目将无法链接到发票。
class Transaction(models.Model):
amount = models.FloatField()
client = models.ForeignKey(Client)
date = models.DateField()
description = models.CharField()
invoice = models.ForeignKey(Invoice, null=True)
现在我想在月底为每个客户创建发票。发票模型如下所示:
class Invoice(models.Model):
client = models.ForeignKey(Client)
invoice_date = models.DateField()
invoice_number = models.CharField(unique=True)
def amount_due(self):
return self.transaction_set.aggregate(Sum('amount'))
def create_invoices(invoice_date):
for client in Client.objects.all():
transactions = Transaction.objects.filter(client=client)
if transactions.exists():
invoice = Invoice(client=client, number=get_invoice_number(), date=invoice_date)
invoice.save()
transactions.update(invoice=invoice)
我知道使用批量创建可以在1个查询中创建所有发票,但我仍然需要逐个设置交易模型中的发票字段。
是否可能在创建所有发票后,使用单个查询设置所有Transaction模型的发票字段?最好使用ORM,但如果需要也可以使用原始SQL。
我知道也可以在交易列表上按客户分组以获得每个客户的总额,但是这样的话,各个条目将无法链接到发票。