社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

了解Django ModelForm提交

Sushant • 6 年前 • 1795 次点击  

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

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条件且表单有效时,才会保存,如下所示。保存后我还没有检索到评论。但是,仍然, 评论 '变量包含我最近所做的注释。 这是怎么回事?这是什么巫术?请有人给我说清楚!!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38725
 
1795 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Daniel Roseman
Reply   •   1 楼
Daniel Roseman    7 年前

你错过的是 querysets are lazy . 尽管在保存注释之前创建了查询集,但在迭代之前实际上不会进行查询,这会在保存新注释之后在模板本身中发生。

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

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