Django如何按多个字段分组并求和

时间:2019-05-27 15:20:26

标签: django

我正在尝试在我的表上执行多个group_by,其字段与下面的序列化器相同(最后一栏是金钱)

class MoneySerializer(serializers.ModelSerializer):
money_sum = serializers.IntegerField()

class Meta:
    model =  my_models.Money
    fields = ('date', 'city', 'money_sum')

我在视图集中的查询如下

items = my_models.Money.objects.values('date', 'city').annotate(money_sum=Sum('money'))

但是,我将对city列执行group_by,但对于date字段仍将重复。我想对行进行分组,以便按所有相同的城市值和所有相同的日期值分组。

编辑:我的模型

class Money(models.Model):
    date = models.DateField()
    city = models.models.CharField(max_length=200)
    money = models.DecimalField(decimal_places=2, max_digits=20)

1 个答案:

答案 0 :(得分:1)

您需要在此处添加order_by [Django-doc]来强制GROUP BY

Money.objects.values('date', 'city').annotate(
    money_sum=Sum('money')
).order_by('date', 'city')

这将产生QuerySet个离子对中的dict,例如:

<QuerySet [
    {'date': date(2019, 1, 1), 'city': 'Berlin', 'money_sum': 1425.00},
    {'date': date(2019, 1, 1), 'city': 'Vienna', 'money_sum': 1302.00},
    {'date': date(2019, 2, 9), 'city': 'Madrid', 'money_sum': 1789.00},
    {'date': date(2019, 6, 29), 'city': 'Vienna', 'money_sum': 2019.00}
]>