You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django开发中如何将评论正确关联到其对应的所属帖子

你当前代码的问题主要有三点:1、Comment模型的comment_default默认值逻辑错误,只会返回第一个帖子的ID;2、跳转评论提交页时没有传递当前访问的帖子ID,视图无法识别要绑定的目标帖子;3、评论创建视图没有自动绑定帖子的逻辑,完全依赖错误的默认值自然会绑定错。

以下是完整修改步骤:

第一步:修正Comment模型的错误配置

删掉错误的默认值函数和对应配置:

class Comment(models.Model):
    author = models.ForeignKey(User, default=1,
                        on_delete = models.CASCADE
                        )
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    
    # 删掉comment_default函数,post字段去掉default参数
    post = models.ForeignKey(UserPost, on_delete=models.CASCADE, related_name="comments")

    def __str__(self):
        """String for representing the comment object."""
        return '%s - %s - %s' % (self.post.title, self.author, self.created_on)
    def get_absolute_url(self):
        return reverse('userpost-detail', args=[str(self.post.id)])

第二步:修改评论创建路由配置

在项目的urls.py中给评论创建路由增加帖子ID参数:

# 原comment-create对应的配置修改为
path('comment/<int:post_id>/add/', CommentCreate.as_view(), name='comment-create'),

第三步:修改详情页的评论跳转链接

模板中跳转评论页时携带当前帖子的ID:

<a class="btn btn-primary" href="{% url 'comment-create' userpost.pk %}" role="button">Leave a Comment</a>

第四步:重写CommentCreate视图逻辑

先在views.py顶部导入依赖:

from django.shortcuts import get_object_or_404

再修改视图,自动绑定对应帖子:

class CommentCreate(CreateView):
    model = Comment
    # 去掉post字段,不需要用户手动选择
    fields = ['content']

    def form_valid(self, form):
        # 从url参数获取当前要绑定的帖子对象
        post = get_object_or_404(UserPost, pk=self.kwargs['post_id'])
        # 给评论实例绑定帖子
        form.instance.post = post
        # 可选:绑定当前登录用户作为评论作者,替换默认的固定ID
        form.instance.author = self.request.user
        return super().form_valid(form)

    def get_success_url(self):
        # 提交成功后跳回对应帖子的详情页
        return reverse('userpost-detail', kwargs={'pk': self.kwargs['post_id']})

内容的提问来源于stack exchange,提问作者AllyZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:24:03