【问题标题】:get() returned more than one Post : return 2get() 返回多个 Post : return 2
【发布时间】:2020-05-04 09:18:41
【问题描述】:

我试图为我的 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'),

【问题讨论】:

    标签: django django-models django-views django-urls


    【解决方案1】:

    这一行没有过滤帖子,所以它会返回所有帖子

    obj = get_object_or_404(Post)
    

    您想按主键进行过滤,您可以从 **kwargs 中获取该主键

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

    【讨论】:

    • if user.is_authenticated 中删除() - 自 Django 1.10 以来它一直是一个属性。
    • 它的工作正常,我导入 api 并再次显示错误 get() 得到了一个意外的关键字参数 'pk'
    • 我是否需要更改 urls.py, path('blog/api//like/', PostLikeApiToggle.as_view(),name='Like-Api-Toggle') ,
    • 抱歉,我无法在一个线程上解决多个问题。如果您有新问题,请提出新问题。显示代码和错误的完整回溯。如果没有完整的回溯,我们必须猜测错误来自哪里。
    猜你喜欢
    • 1970-01-01
    • 2022-08-24
    • 2021-06-24
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2022-01-11
    相关资源
    最近更新 更多