Вы можете аннотировать Sottocategoria
объекты суммой quantita
:
from django.db.models import Sum
Sottocategoria.objects.annotate(
<b>quantita=Sum('meteriale__quantita')</b>
)
Sottocategoria
объектов, которые возникают из этого набора запросов, будет иметь дополнительный атрибут .quantita
, который содержит сумму quantita
связанных Materiale
объектов.
Таким образом, вы можете использовать этот запрос в представлениях, где вам нужно всего quantita
, а затем, например, отобразить его в шаблоны с {{ mysottocategoria.quantita }}
.
Если вам это нужно часто, вы можете использовать manager для этого:
class <b>SottocategoriaManager</b>(models.Manager):
def get_queryset(self):
super().get_queryset().annotate(
<b>quantita=Sum('meteriale__quantita')</b>
)
class Sottocategoria(models.Model):
# …
<b>objects = SottocategoriaManager()</b>
Теперь каждый раз, когда вы получаете доступ к Sottocategoria.objects
Таким образом, он вернет аннотированный набор запросов.
Можно использовать выражение Coalesce
[Django -doc] для замены NULL
на 0
если нет связанных meteriale
:
from django.db.models import Sum, Value
from django.db.models.functions import Coalesce
Sottocategoria.objects.annotate(
<b>quantita=Coalesce(Sum('meteriale__quantita'), Value(0))</b>
)
Вы можете реализовать это в менеджере, если вам нужно часто, как указано ранее.