Python Django和正值与负值分开
你能把正值和负值分开求和吗 我有一张这样的桌子:Python Django和正值与负值分开,python,django,orm,django-2.0,Python,Django,Orm,Django 2.0,你能把正值和负值分开求和吗 我有一张这样的桌子: class Order(models.Model): date = models.DateField() amount = models.DecimalField() 我希望得到一个查询集,该查询集按周将正金额与负金额和组进行汇总: Year Week Sum of positive amounts Sum of negative amounts 我可以通过以下方式每周分别获得所有正金额: Order.objects.filt
class Order(models.Model):
date = models.DateField()
amount = models.DecimalField()
我希望得到一个查询集,该查询集按周将正金额与负金额和组进行汇总:
Year
Week
Sum of positive amounts
Sum of negative amounts
我可以通过以下方式每周分别获得所有正金额:
Order.objects.filter(amount__gt=0).annotate(year_week=Trunc('date', 'week', output_field=DateField())).\
annotate(year=ExtractYear('year_week')).annotate(week=ExtractWeek('year_week')).\
values("year_week", "year", "week").annotate(value=Sum("amount")).order_by("-year_week")
对于负值,我可以再次这样做,但是我有两个独立的查询集。
我可以在不手动循环的情况下高效地合并它们吗?或者有没有一种方法可以在单个查询中同时执行这两种操作?是的,因为大多数聚合函数都有:
从django.db.models导入Q,求和
从django.db.models.functions导入ExtractYear、ExtractWeek
顺序、对象、值(
年份=年份(“日期”),
周=提取周(“日期”)
).注释(
sum_pos=sum('amount',filter=Q(amount_gt=0)),
sum_neg=sum('amount',filter=Q(amount_lt=0))
).按('年'、'周')订购。
from django.db.models import Q, Sum
from django.db.models.functions import ExtractYear, ExtractWeek
Order.objects.values(
year=ExtractYear('date'),
week=ExtractWeek('date')
).annotate(
sum_pos=Sum('amount', filter=Q(amount__gt=0)),
sum_neg=Sum('amount', filter=Q(amount__lt=0))
).order_by('year', 'week')