Первые сообщения всех пользователей
Я создаю BlogApp и пытаюсь реализовать функцию,
Итак, я пытаюсь получить доступ к first post of all the users
.
models.py
class BlogPost(models.Model):
user= models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=30, default='')
body = models.CharField(max_length=30, default='')
views.py
def first_posts(request):
user = User.objects.all()
posts = BlogPost.objects.filter(user=user).first()
context = {'posts':posts}
return render(request, 'first_posts.html', context)
Но он показывает
Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки.
Когда я пытаюсь использовать User.objects.all().first()
, он показывает только первое сообщение во всех сообщениях.
Я пробовал много раз, но он все еще не работает.
Любая помощь будет очень признательна. Спасибо
Я не могу придумать очень эффективный способ сделать это, но используя prefetch_related, вы должны делать только 2 запроса.
def first_posts(request):
posts = [user.blogpost_set.first() for user in User.objects.prefetch_related('blogpost_set')]
Ссылка на prefetch_related: https://docs.djangoproject.com/en/3.2/ref/models/querysets/#prefetch-related
Пробовали ли вы сделать это с помощью агрегации? Может быть, работает что-то вроде этого:
posts = BlogPost.objects
.values('id', 'user')
.annotate(count=Count('user'))
.order_by
Обратите внимание, что вам необходимо импортировать функцию Count. Также я бы не рекомендовал выполнять поиск по первичному ключу, поэтому лучше добавить поле даты к вашему BlogPost