使用保护表单更新数据库中的记录时的POST角色

时间:2014-05-19 17:01:48

标签: python django

请解释以下内容

文档是在数据库中保存表单的一个示例:

>>> from myapp.models import Article
>>> from myapp.forms import ArticleForm

#1
# Create a form instance from POST data.
>>> f = ArticleForm(request.POST)
# Save a new Article object from the form's data.
>>> new_article = f.save()

#2
# Create a form to edit an existing Article, but use
# POST data to populate the form.
>>> a = Article.objects.get(pk=1)
>>> f = ArticleForm(request.POST, instance=a)
>>> f.save()

这里第一种情况是向数据库添加新记录

在第二种情况下是更新数据库中的现有记录

在两种情况下都传输到已添加或更新的POST字典。但后者通过关键字参数实例传输字典'a'(但用于更新记录'a',而不是POST)

问题。为什么在第二种情况下转移字典POST?

1 个答案:

答案 0 :(得分:1)

在这两种情况下,您实际上将request.POST字典作为单个参数传递给表单的__init__方法。这样,表单可以区分实际的帖子数据和其他参数。 request.POST字典的完整性保存在data属性中。稍后,在is_valid方法中,字典中的键和值将根据表单的字段进行检查,并用于验证表单并填充cleaned_data属性。