Django - Запрос сообщений вместе с количеством ответов?
Я пытаюсь заполнить ленту новостей сообщениями определенной категории. Затем я хочу иметь возможность отображать количество ответов на сообщение. Я запутался, как это сделать, потому что я отфильтровал цели по категориям, затем отфильтровал все посты, связанные со всеми этими целями, и теперь у меня есть список словаря, содержащий тело поста, описание цели и дату создания, но я хотел бы также добавить количество ответов, и я не уверен, как сделать это эффективным способом. Также я понимаю, что мой способ выполнения действий в view.py не идеален, поэтому любые предложения будут замечательными!
Model.py
class Post(AbstractBaseModel):
creator_id = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="post_creator_id")
goal_id = models.ForeignKey(Goal, on_delete=models.CASCADE)
body = models.CharField(max_length=511, validators=[MinLengthValidator(5)])
hash_tags = models.ManyToManyField(HashTag)
class ReplyPost(AbstractBaseModel):
creator_id = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="reply")
post_id = models.ForeignKey(Post, on_delete=models.CASCADE)
body = models.CharField(max_length=250)
View.py
@api_view(['GET'])
def get_most_recent_posts_by_category(request, category, count):
goals_list = list(Goal.objects.filter(category = category).values_list('uuid', flat=True))
data = list(Post.objects.filter(goal_id__in=goals_list).order_by('created').values('body', 'goal_id__description', 'created'))
data['goal_description'] = data['goal_id__description']
data['post_body'] = data['body']
del data['goal_description']
del data['body']
return JsonResponse(data, status=status.HTTP_200_OK)
Вы можете использовать Count('replypost')
для добавления количества элементов:
from django.db.models import Count
data = list(
Post.objects.filter(
goal_id__in=goals_list
).order_by(
'created'
).values(
'body', 'goal_id__description', 'created', replies=Count('replypost')
)
)