Django评论模型返回空数据问题求助(附视图代码)
排查Django评论为空问题的几个实用方向
嘿,看你贴的代码里createPost类的post方法没写完,这说不定就是个小坑!先从几个常见的原因逐个排查:
评论表单没传到模板里
要是你展示帖子详情的视图没把CommentForm实例传给模板,那模板里既没法渲染评论输入框,更别提后续提交评论了。比如在详情视图里得这么写:def post_detail(request, pk): post = get_object_or_404(Post, pk=pk) comment_form = CommentForm() # 还要把已有的评论查出来传给模板 comments = post.comments.all() # 这里假设Post和Comment是ForeignKey关联,related_name设的是comments return render(request, 'forum/post_detail.html', { 'post': post, 'comment_form': comment_form, 'comments': comments })评论模型的关联关系错了
赶紧检查你的Comment模型,是不是正确关联了Post?比如:class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments') content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True)要是
related_name没设置或者设错了,查询帖子的评论时根本拿不到数据。评论提交的视图逻辑缺失
你现在的createPost是处理帖子创建的,那评论提交的处理逻辑在哪?得有专门的视图(或者在详情视图里处理POST请求)来接收评论表单的数据:def add_comment(request, pk): post = get_object_or_404(Post, pk=pk) if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.post = post comment.author = request.user # 要是需要关联登录用户的话 comment.save() return redirect('post_detail', pk=post.pk) # 要是GET请求或者表单无效,就跳回帖子详情页 return redirect('post_detail', pk=post.pk)别忘了在
urls.py里给这个视图配个路由哦。模板里没正确渲染评论列表
就算后台查到了评论,模板里没循环渲染也会显示为空。比如在post_detail.html里加这段:<div class="comment-section"> <h3>评论区</h3> {% for comment in comments %} <div class="single-comment"> <p><strong>{{ comment.author.username }}</strong> 说:</p> <p>{{ comment.content }}</p> <small>发布于: {{ comment.created_at|date:"Y-m-d H:i" }}</small> </div> {% empty %} <p>还没有评论,快来抢第一个沙发吧!</p> {% endfor %} </div>表单验证或保存时出了问题
检查CommentForm是不是包含了必要字段?有没有自定义的clean方法导致验证失败?比如如果表单需要用户字段,但你没在视图里手动赋值就直接save,会报错导致评论存不进去。
另外你贴的createPost类的post方法没写完,要是帖子创建都有问题,那评论关联的帖子都不存在,自然也看不到评论啦。补全一下参考:
def post(self, request): form = PostForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.author = request.user # 关联创建帖子的用户 post.save() return redirect('post_detail', pk=post.pk) # 表单无效的话返回原页面带错误信息 return render(request, self.template_name, {'form': form})
先从这几个方向查,应该能找到问题所在~
内容的提问来源于stack exchange,提问作者Geeksquid
相关产品推荐
相关产品推荐

