Django - Группировать по и делать ArrayAgg

У меня есть модель:

class Deviation(models.Model):
    deviation_number = models.SmallIntegerField()
    day_of_calculation = models.SmallIntegerField()

Я хотел бы сгруппировать записи модели по day_of_calculation и получить список deviation_numbers:

deviations = Deviation.objects \
    .values('day_of_calculation') \
    .annotate(deviation_numbers=ArrayAgg('deviation_number'))

Но Django неправильно создает sql:

SELECT "deviation"."day_of_calculation", ARRAY_AGG("deviation"."deviation_number" ) AS "deviation_numbers" FROM "deviation" GROUP BY "deviation"."day_of_calculation", "deviation"."deviation_number"

Группировка по deviation_number не должна происходить.

Что я делаю не так?

Вам следует добавить .order_by(…) пункт [Django-doc] для принудительного GROUP BY на полях, перечисленных в .order_by(…), так:

Deviation.objects.values('day_of_calculation').annotate(
    deviation_numbers=ArrayAgg('deviation_number')
).order_by('day_of_calculation')
Вернуться на верх