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

Django提交评论返回404无匹配查询 评论未保存问题求助

根因分析
  • 你的CommentCreatView绑定的模型是Comment,提交表单执行form_valid逻辑时调用了self.get_object()方法。Django通用视图的get_object()默认会根据URL中传递的pk参数,查询当前视图绑定的模型数据,你URL里传的pk=6是帖子ID,不是评论ID,所以系统去Comment表查ID=6的评论找不到,直接抛出404错误。
  • 额外的小问题:你配置的success_url = 'homepage'是字符串类型的相对路径,Django不会自动做路由反解析,提交成功后的跳转路径也会出错。

修复方案

第一步:修改views.py中的CommentCreatView逻辑

首先导入你项目的Post模型,然后修改form_valid方法,不要调用get_object(),直接从URL参数中取帖子ID查询对应Post实例,同时修正成功跳转逻辑:

from django.urls import reverse_lazy, reverse
# 导入你自己定义的Post模型
from .models import Comment, Post

class CommentCreatView(LoginRequiredMixin, CreateView): 
    model = Comment
    fields = ['text']
    template_name = 'home/add-comment.html'
    # 如果你想跳转到首页可以用下面的配置,需要用reverse_lazy做路由反解析
    # success_url = reverse_lazy('homepage')

    def form_valid(self,form):
        form.instance.user = self.request.user 
        # 从URL参数中获取帖子ID查询对应Post实例,不要调用self.get_object()
        post = Post.objects.get(pk=self.kwargs['pk'])
        form.instance.post = post
        return super().form_valid(form)
    
    # 推荐用这个方法,提交成功后跳转回对应帖子的详情页,用户体验更好
    def get_success_url(self):
        return reverse('post-and-comments', kwargs={'pk': self.kwargs['pk']})

第二步(可选优化):修正urls.py的路由规则

给add-comment的路由末尾添加斜杠,匹配Django默认的路由匹配规则,避免访问时出现301跳转问题:

path('post/<int:pk>/comment/', CommentCreatView.as_view(), name='add-comment'),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:39:00