сгруппировать по целому диапазону Django & posgres - PullRequest
0 голосов
/ 05 марта 2020

У меня есть таблица, которую я хотел бы сгруппировать по целому диапазону (возрасту). Таблица для примера:

Name   Age
John   21
Steve  24
Dan    29 
Mike   31 

Мой ожидаемый результат - сгруппировать имя по возрастным диапазонам, например [21-28] [29-33], так что я получу следующий результат:

[21-28] [29-33]
  John    Dan
  Steve   Mike

Я играл с функцией аннотации Django, но до сих пор не понял.

есть предложения?

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Если вы хотите указать, к какой возрастной группе он относится, используйте conditional annotation(Case), например:

from django.db.models import Case, CharField, Value, When

Person.objects.annotate(
     age_group = Case(
          When(age__range=[21, 27], value=Value('21-27')),
          When(age__range=[29, 33], value=Value('29-33')),
          default=Value('No group'),
          output_field=CharField(),
     )
).values('age', 'age_group')
0 голосов
/ 05 марта 2020

Похоже, у вас есть конечное число групп, почему бы не сделать запрос для всех без исключения?

21_28_group = Person.objects.filter(age__gte=21).filter(age__lte=28)
29_33_group = Person.objects.filter(age__gte=29).filter(age__lte=33)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...