Django: выберите статус, количество (статус) из таблицы group_by status; - PullRequest
0 голосов
/ 31 марта 2020

Я знаю, что по Django почему-то нет group_by. Однако мне нужно получить количество предметов в каждом из возможных статусов. Это можно сделать с помощью очень простого запроса:

select status, count(status) from table group_by status;

В то же время, в нашем проекте мы стараемся сделать как можно больше в Django ORM, и до сих пор никогда не использовали raw SQL где-нибудь, за исключением некоторых миграций.

Есть ли способ сделать это в Django ORM без получения дубликатов?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы можете попробовать вот так (с annotation):

from django.db.models import Count    
YourModel.objects.values('status').annotate(status_count=Count('status'))
1 голос
/ 31 марта 2020

Вы можете использовать values() для группировки вашего набора запросов.

from django.db.models import Count
MyModel.objects.values('status').annotate(num=Count('status'))

вернет <QuerySet [{'status': 1, 'num': 4}, {'status': 2, 'num': 12}...]>

Примечание: если у вас есть какие-либо заказы на вашей модели или на вашем менеджере по умолчанию, вы должны сначала удалить это, добавив order_by().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...