我正在尝试在我的表上执行多个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)
答案 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}
]>