Django - Как вычесть две аннотации с разными моделями
a = Category.objects.annotate(total_products=Count('product'))
b=Order.objects.values('category__name').annotate(total_approve=Sum('approve_quantity')).order_by('-total_approve')
поэтому я хочу вычесть a - b
Вы можете аннотировать Categorys с помощью Subquery выражения [Django-doc]:
from django.db.models import Count, F, OuterRef, Subquery, Sum
Category.objects.annotate(
total_products=Count('product'),
total_approve=Subquery(
Order.objects.filter(
category=OuterRef('pk')
).values('category').annotate(
total=Sum('approve_quantity')
).order_by('category').values('total')[:1]
)
).annotate(
difference=F('total_products')-F('total_approve')
)
Объекты Category, возникающие из этого кверисета, будут иметь дополнительный атрибут .difference, который будет содержать разницу между количеством связанных Products и суммой approved_quantitys для связанных Orders.