Первые сообщения всех пользователей

Я создаю 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

Вернуться на верх