为了账号安全,请及时绑定邮箱和手机立即绑定

喜欢按钮 Django3 - KeyError at /nutriscore/exemple-1/

喜欢按钮 Django3 - KeyError at /nutriscore/exemple-1/

HUH函数 2023-03-22 16:54:50
我希望你很好。我是 Python 的初学者,我正在尝试在这样的博客文章中实现一个赞按钮。在管理部分,我可以看到谁在点击类似的内容。但是我遇到两个问题:第一个:当我点击“赞”按钮时,“返回”使用这种 url nutriscore/4/ 重定向我,或者我的文章使用了一个 slug(比如 /nutriscore/exemple-1/。你有什么想法吗?第二个:当我想显示喜欢的数量时 {{ total_likes }} 我有这个问题:KeyError at /nutriscore/exemple-1/ 'pk'Models.py:class Post(models.Model):    ...    likes = models.ManyToManyField(User, related_name='nutriscore_posts')        def total_likes(self):        return self.likes.count()Views.py:class PostList(generic.ListView):    queryset = Post.objects.filter(status=1).order_by('-created_on')    template_name = 'index.html'def LikeView(request, pk):    post = get_object_or_404(Post, id=request.POST.get('post_id'))    post.likes.add(request.user)    return HttpResponseRedirect(reverse('post_detail', args=[str(pk)]))class PostDetail(generic.DetailView):    model = Post    context_object_name = 'post'    template_name = 'post_detail.html'        def get_context_data(self, **kwargs):        context = super(PostDetail, self).get_context_data(**kwargs)        stuff = get_object_or_404(Post, id=self.kwargs['pk'])        total_likes = stuff.total_likes        context['total_likes'] = total_likes        return contexturls.pypath('like/<int:pk>', LikeView, name="like_post"),post_detail.html    <form action="{% url 'like_post' post.pk %}" method="POST">{% csrf_token %}<button type="submit" name="post_id" value="{{ post.id }}" class="cherry-likes"><img src="static/img/like.png" width="30px" height="30px" class="" title=""></button></form>多谢 :)
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您pk应该是int。您还在您的网址中指定为 int,但在视图中没有指定。


post = get_object_or_404(Post, id=pk )

if request.method == "POST": 

     post.likes.add(request.user)

     return redirect('post_detail', post.pk)

要显示帖子的总赞数,您需要添加property这样的装饰器


@property

def total_likes(self):

    return self.likes.count()

现在在详细信息模板{{post.total_likes}}中将显示结果。


无需编写get_context_data方法来显示 total_likes。


查看完整回答
反对 回复 2023-03-22
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

第一个问题:你将 pk 传递给重定向,它是一个整数(根据你的 urls.py)到 url: args=[str(pk)]。如果你想重定向到一个 url,/nutriscore/exemple-1你应该传递 slug 而不是 pk(我猜这是 id)并相应地调整你的 urls.py。

第二个问题:你确定那个帖子有一个名为 pk 的属性/键吗?这不应该是id吗?喜欢:

<form action="{% url 'like_post' post.id %}" method="POST">{% csrf_token %}<button type="submit" name="post_id" value="{{ post.id }}" class="cherry-likes"><img src="static/img/like.png" width="30px" height="30px" class="" title=""></button></form>



查看完整回答
反对 回复 2023-03-22
  • 2 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信