外观
save()方法
每个ModelForm都有一个save()方法,此方法根据绑定到表单的数据创建并保存数据库对象。ModelForm子类可以接受现有的模型实例作为关键字参数实例。若提供了此参数,则save()方法会更新此实例。若未提供,则save()方法将创建指定模型的新实例。在shell中示例代码如下:
>>> from myapp.model import Article
>>> from myapp.forms import ArticleForm
>>> f = ArticleForm(request.POST)
>>> new_article = f.save()
>>> a = Article.objects.get(pk=1)
>>> f = ArticleForm(request.POST, instance=a)
>>> f.save()调用save()方法时,通过添加commit=False可以避免立即存储数据,可通过后续的修改或补充,得到完整的Model实例后再存储到数据库。
若初始化时传入了instance,那么调用save()时会用ModelForm中定义过的字段值覆盖传入实例的相应字段,并写入数据库。save()方法同样会存储MantToManyField,若调用save()方法时使用了commit=False,那么ManyToManyField的储存需要等该条目存入数据库之后手动调用save_m2m()方法。示例代码如下。
# 新建一个表单实例,传递POST数据
>>> f = AuthorForm(request.POST)
# 创建一个新的实例,但是不保存
>>> new_author = f.save(commit=False)
# 修改实例属性
>>> new_author.some_field = 'some_value'
# 保存实例
>>> new_author.save()
# 保存多对多类型数据
>>> f.save_m2m()仅当使用save(commit=False)时才使用save_m2m()。当在表单上使用save()时,所有数据(包含多对多数据)都会被保存。如:
>>> a = Author()
>>> f = AuthorForm(request.POST, instance=a)
>>> new_author = f.save()