Gag*_*gan 6 python django django-forms
我知道 django 中的 modelform 是一种用于生成模型实例的表单,但是假设如果我们想通过 modelform 更新已经存在的模型实例,那么它会更新模型还是创建一个全新的实例。
每个 ModelForm 也有一个save()方法。此方法根据绑定到表单的数据创建并保存数据库对象。ModelForm 的子类可以接受现有的模型实例作为关键字参数实例;如果提供了这个,save() 将更新该实例。
如果未提供, save() 将创建指定模型的新实例:
>>> from myapp.models import Article
>>> from myapp.forms import ArticleForm
# 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()
# 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()
Run Code Online (Sandbox Code Playgroud)
另一方面,您也可以指定是否要创建新实例...
仅当您使用 save(commit=False) 时才需要调用 save_m2m()。当您在表单上使用简单的 save() 时,所有数据(包括多对多数据)都将被保存,无需任何额外的方法调用。
来源: https : //docs.djangoproject.com/en/2.1/topics/forms/modelforms/#the-save-method
是的,这在[Django-doc] 的文档ModelForm中进行了解释:
Run Code Online (Sandbox Code Playgroud)# Creating a form to change an existing article. >>> article = Article.objects.get(pk=1) >>> form = ArticleForm(instance=article)
因此,我们可以创建一个表单并传递一个已经存在的实例,例如:
MyModelForm(instance=my_modelinstance)Run Code Online (Sandbox Code Playgroud)
如果渲染该表单,它将包含 initally 的值instance。
我们还可以使用表单来更新模型,例如:
my_form = MyModelForm(request.POST, instance=my_modelinstance)Run Code Online (Sandbox Code Playgroud)
如果我们随后执行my_form.save(),my_modelinstance将会使用 中的数据进行更新request.POST,并在数据库中更新。
ModelForm 的子类可以接受现有的模型实例作为关键字参数实例;如果提供了这个, save() 将更新该实例。如果未提供 it\xe2\x80\x99s,save() 将创建指定模型的新实例。
\n\n来源:https ://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#the-save-method
\n