Как получить только один экземпляр модели в представлениях

#python #django #django-models #django-views

#python #django #django-модели #django-представления

Вопрос:

Я создаю BlogApp и застрял на проблеме.

Что я пытаюсь сделать

Я пытаюсь получить доступ ко всем данным только одного Model instance in Function Based View .

Вкратце

Я пытаюсь показать все сообщения, понравившиеся a all the users на определенной странице.

Что я пробовал

   1). post = Paintings.objects.filter(likes=pk)
 
  • Это не сработало, потому что оно показывает только сообщения вошедшего в систему пользователя. И я хочу получить все понравившиеся сообщения.
     2). post = Paintings.objects.all()
     
  • Это также не сработало для меня.

models.py

 class Post(models.Model):
    post_owner = models.ForeignKey(User,default='',null=True,on_delete=models.CASCADE)
    likes = models.ManyToManyField(User, related_name='post_like', blank=True)
 

views.py

 def featured_paintings(request,pk):
    post = Post.objects.filter(likes=pk)

    context = {'post':post}
    return render(request, 'mains/featured_posts.html', context)
 

Я не знаю, что делать.

Любая помощь будет оценена.

Заранее благодарю

Комментарии:

1. Вам нужны все сообщения, которые понравились хотя бы одному пользователю, или вам нужны все сообщения, которые понравились всем пользователям?

2. Спасибо за комментарий, я хочу, чтобы все сообщения понравились хотя бы одному пользователю

Ответ №1:

Вы можете использовать isnull поиск для фильтрации отношений, имеющих хотя бы один связанный объект

 Post.objects.filter(likes__isnull=False)
 

Комментарии:

1. Спасибо. Вот в чем дело

Ответ №2:

Попробуйте исключить сообщения, которые совпадают likes=None , это даст вам все экземпляры, у которых есть хотя бы один лайк:

 post = Post.objects.exclude(likes=None)
 

Комментарии:

1. Большое вам спасибо, оба ответа сработали нормально. Можете ли вы подсказать мне, что я должен отметить как Correct Answer ?

2. @Progam Ответ Иэна Шелвингтона он был раньше на несколько секунд.

3. Спасибо, вы очень любезны