У меня есть следующая модель:
class InvoiceEntry(models.Model):
invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE, related_name='entries', verbose_name=_("Invoice"))
line = models.CharField(max_length=500, verbose_name=_("Print Line"))
text = models.TextField(null=True, blank=True, verbose_name=_("Print Text"))
amount = models.PositiveIntegerField(verbose_name=_("Amount"))
unit_price = models.FloatField(null=True, blank=True, verbose_name=_("Unit Price"))
content_type = models.ForeignKey(ContentType, on_delete=models.PROTECT, null=True, blank=True, validators=[validate_invoice_target_models])
object_id = models.PositiveIntegerField(null=True, blank=True)
is_separator = models.BooleanField(default=False)
Я хочу получить сумму за один счет, поэтому я получаю набор запросов, используя: invoice_entries = InvoiceEntry.objects.filter(invoice_id=2227)
, и если я применяю values('amount', 'unit_price')
, я получаю:
{'amount': 0, 'unit_price': None}
{'amount': 4, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 1, 'unit_price': 11.5}
{'amount': 4, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 1, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 1, 'unit_price': 26.0}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 2, 'unit_price': 11.5}
{'amount': 9, 'unit_price': 23.0}
Это в сумме составляет 716,00 , но когда я пытаюсь агрегировать:
total = InvoiceEntry.objects.filter(invoice_id=2227).aggregate(amount=Sum('amount', field=('amount * unit_price')))
Я получаю:
{'amount': 52}
Я не знаю, что я делаю неправильно.