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')