Предположим, у меня есть список транзакций со следующим определением модели:
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 запросе с массовым созданием, но мне все равно придется установить поле счета в модели транзакций.индивидуально.
Можно ли задать поле счета всех моделей транзакций одним запросом после того, как я создал все счета?Предпочтительно при использовании ORM, но с удовольствием использую необработанный SQL, если требуется.
Я знаю, что я также могу использовать группу по клиенту в списке транзакций, чтобы получить общее количество по клиенту, но тогда отдельные записи не связаны ссчет-фактура.