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

理解django ModelForm提交

理解django ModelForm提交

慕哥9229398 2021-06-04 14:39:15
我正在尝试在博客中创建评论系统。这是视图部分。def post_content(request,post_slug):   post= Post.objects.get(slug=post_slug)   new_comment=None   #get all comments that are currently active to show in the post   comments= post.comments.filter(active=True)   if request.method=='POST':    comment_form= CommentForm(request.POST)    if comment_form.is_valid():        # saving a ModelForm creates an object of the corresponding model.         new_comment= comment_form.save(commit=False)        new_comment.post=post        new_comment.save()   else:    comment_form=CommentForm()return render(request,'blog/post_content.html',{'post':post,'comments':comments,'comment_form':comment_form})还没有评论。现在,我不明白的是当我发表评论然后页面重新加载时,我立即看到了评论(我不应该看到)。根据我的理解,这应该是流程 - 当页面重新加载时(提交评论后),它首先查看并检索活动评论(它应该是空的,因为还没有保存,是吗?)它仅在if 条件满足,form is valid ,都在下面。而且我保存后没有检索到评论。但是,' comments ' 变量仍然包含我最近发表的评论。这是怎么回事?这是什么法宝?请有人帮我说清楚!!
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

您缺少的是查询集是 lazy。尽管您在保存评论之前创建了查询集,但直到您进行迭代后才会真正进行查询,这在保存新评论后发生在模板本身中。

请注意,正如 Willem 在评论中指出的那样,您确实应该在成功保存后重定向到另一个页面。这是为了防止用户刷新页面时重复提交。如果愿意,您可以重定向回同一页面,但重要的是您返回重定向而不是进入渲染。

new_comment.save()
return redirect('post-comment', post_slug=post_slug)


查看完整回答
反对 回复 2021-06-09
  • 1 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

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