В представлении списка PurchaseOrder
я бы хотел отобразить общее количество quantity
, сгруппированное по каждому отдельному unit
. Я использую следующие модели и функции, но каждый раз, когда вызывается get_quantity_by_unit()
, происходит сбой базы данных - для каждого объекта в списке.
class PurchaseOrder(models.Model):
lines = models.ManyToManyField(
Product, blank=True, through='PurchaseOrderLine' related_name='%(class)s_line')
def get_quantity_by_unit(self):
return PurchaseOrderLine.objects.filter(purchase_order=self).values(
'unit__abbreviation').annotate(sum=Sum('quantity'))
class PurchaseOrderLine(models.Model):
purchase_order = models.ForeignKey(PurchaseOrder)
product = models.ForeignKey(Product)
quantity = models.DecimalField()
unit = models.ForeignKey(Unit)
Можно ли этого достичь с помощью django orm?
Следующее получает общее количество, но не для каждого отдельного unit
:
query = PurchaseOrder.objects.filter(date__gte=cutoff_date).annotate(
total=Sum('purchaseorderline_order__quantity'))
следующие броски ValueError: Prefetch querysets cannot use values().
queryset = PurchaseOrderLine.objects.values(
'unit').order_by('unit').annotate(total=Sum('quantity'))
query = PurchaseOrder.objects.filter(date__gte=cutoff_date).prefetch_related(
Prefetch('purchaseorderline_order', queryset=queryset, to_attr='totals'))