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
相关产品推荐
相关产品推荐

