Джанго, как сгруппировать по нескольким полям и сумме - PullRequest
1 голос
/ 27 мая 2019

Я пытаюсь выполнить несколько 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'))

Но с этим я сделаю group_by для столбца city, но у меня все еще будут дубликаты для поля даты.Я хотел бы сгруппировать строки так, чтобы они группировались по одинаковым городским значениям и одинаковым значениям дат.

edit: моя модель

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

1 Ответ

1 голос
/ 27 мая 2019

Вам нужно добавить order_by [Django-doc] , чтобы вызвать GROUP BY здесь:

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

Это приведет к 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}
]>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...