Я пытаюсь получить список последних 100 сообщений, а также общее количество утвержденных, ожидающих и отклоненных сообщений для пользователя этого сообщения.
models.py
class BlogPost(models.Model):
POST_STATUSES = (
('A', 'Approved'),
('P', 'Pending'),
('R', 'Rejected')
)
author = models.ForeignKey(User)
title = models.CharField(max_length=50)
description = models.TextField()
status = models.ChoiceField(max_length=1, choices=POST_STATUSES)
views.py
Теперь я получаю сводный подсчет вот так, но я запутался, как объединить счет с заголовком постов
top_post_users = list(BlogPost.objects.values_list('user_id', flat=True))[:100]
users = User.objects.filter(pk__in=top_post_users).annotate(approved_count=Count(Case(When(user_posts__status="A", then=1),output_field=IntegerField()))).annotate(pending_count=Count(Case(When(user_posts__status="P", then=1),output_field=IntegerField()))).annotate(reject_count=Count(Case(When(user_posts__status="R", then=1),output_field=IntegerField())))
users.values('approved_count', 'pending_count', 'reject_count')
Это результат, который я хочу:
- Заголовок сообщения, Автор1, 10, 5, 1
- Название сообщения 2, Автор 2, 7, 3, 1
- Заголовок Поста 3, Автор1, 10, 5, 1
Как я могу объединить возвращенный счет с заголовками?
Я знаю, что мог бы использовать цикл for и добавлять каждый из них, но по эффективности я не думаю, что это правильный способ сделать это. Есть ли более эффективный способ использования базы данных django ORM?
Я пробовал это
users.values ('title' ,mitted_count ',' pending_count ',' reject_count ')
... и это работает, но возвращает больше, чем последние 100 сообщений, поэтому я думаю, что он получает все сообщения для этих пользователей и общее количество.