get () вернул более одного поста: return 2 - PullRequest
0 голосов
/ 04 мая 2020

Я пытался создать кнопку «Мне нравится» для моего django блога, но я получаю сообщение об ошибке, как будто ошибка - get () вернул более одного сообщения - он возвратил 2! вот мой код

views.py

class PostLikeRedirect(RedirectView):

          def get_redirect_url(self, *args, **kwargs):
              obj = get_object_or_404(Post)
              url_ = obj.get_absolute_url()
              user = self.request.user
              if user.is_authenticated():
                  obj.likes.add(user)
              return url_

models.py

class Post(models.Model):

     title = models.CharField(max_length=200)
     author = models.ForeignKey(User,on_delete=models.CASCADE)
     likes = models.ManyToManyField(User, blank=True,related_name='post_likes')
     content = models.TextField()
     img = models.ImageField(upload_to='pics',blank=True)
     time = models.DateTimeField(default=timezone.now)

    def __str__(self):
      return self.title

    def get_absolute_url(self):
       return reverse('LoveTravel-Details', kwargs={'pk': self.pk})

urls.py

path('blog/<int:pk>/like/', PostLikeRedirect.as_view(),name='Like'),

1 Ответ

0 голосов
/ 04 мая 2020

Эта строка не фильтрует сообщения, поэтому возвращает все из них

obj = get_object_or_404(Post)

Вы хотите фильтровать по первичному ключу, который вы можете получить из ** kwargs

def get_redirect_url(self, *args, **kwargs):
    obj = get_object_or_404(Post, pk=kwargs['pk'])
    ...
...