了解django ModelForm提交

时间:2018-09-03 07:49:52

标签: python django comments submit modelform

我正在尝试在博客中创建评论系统。这是视图部分。

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有效时才保存。而且保存后我还没有检索到评论。但是,“ 评论”变量仍包含我最近发表的评论。 这是怎么回事?这是什么法术?请有人为我说清楚!

1 个答案:

答案 0 :(得分:0)

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

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

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