django:从构造函数或模型表单创建对象

air*_*ang 2 python django django-models django-forms

从基于模型的模型表格中获取数据后,比如说

form_data = MyModelForm(request.POST)
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个Model by的实例

instance = Model(**form_data.cleaned_data)
Run Code Online (Sandbox Code Playgroud)

或者

instance = form_data.save()
Run Code Online (Sandbox Code Playgroud)

我想知道哪个是django世界的首选方式

Bur*_*lid 7

两者之间存在显着差异.

instance = Model(**form_data.cleaned_data)不会将对象保存在数据库中.它只创建一个本地实例.

instance = form_data.save() 将对象添加到数据库(它执行提交,如果支持的话),它还具有触发验证的副作用.

如果要在保存对象之前对对象进行自定义后处理,则传递commit=False给该save()方法.

instance = form_data.save(commit=False)
# do some stuff with instance
instance.save()
Run Code Online (Sandbox Code Playgroud)