Вот упрощенная версия моей модели:Аннотирование Django querysets с отсчетами с помощью нескольких полеев
class Flight(models.Model):
airline = models.CharField(max_length=100)
origin = models.CharField(max_length=4)
destination = models.CharField(max_length=4)
То, что я хотел бы сделать, это сгруппировать Flight
объектов по их общим значениям для некоторых полей и аннотирования групп с соответствующий номер полета, как описано в документации here.
Я знаю, как это сделать, когда только рассматривая одно поле. Например, с
Flight.objects.values('airline').annotate(Count('id')).order_by('-id__count')
я получаю что-то вроде этого:
[{'airline': 'First Airlines', 'id__count': 21},
{'airline': 'Air Second', 'id__count': 6},
{'airline': 'Third Airways', 'id__count': 3}, ...]
Это означает, что есть 21 Flight
объекты, airline
поле 'First Airlines'
, и так далее.
Но как я могу обобщить, чтобы подсчитать несколько полей и объединить в один аннотированный запрос, который обрабатывает значения из разных полей, как если бы они были тем же самым полем?
Например, предположим, что у меня есть 3 рейса из Лос-Анджелеса в Нью-Йорк и 2 обратные рейсы другой способ (есть 3 Flight
объекты с началом 'LAX'
и назначения 'JFK'
и 2 Flight
объекты с началом 'JFK'
и назначения 'LAX'
). Как я могу это сделать:
[{'airport': 'LAX', 'id__count': 5},
{'airport': 'JFK', 'id__count': 5}]