【问题标题】:django: create object from constructor or model formdjango:从构造函数或模型表单创建对象
【发布时间】:2012-03-28 03:56:24
【问题描述】:

根据一个Model从模型表单中获取数据后,说

form_data = MyModelForm(request.POST)

然后我可以创建一个模型的实例

instance = Model(**form_data.cleaned_data)

或者通过

instance = form_data.save()

我想知道在 django 世界中哪种方式是首选方式

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

    两者有很大区别。

    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()
    

    【讨论】:

    • 那么在任何情况下 Model(**form_data.cleaned_data) 可能有用吗?
    • 如果您手动创建模型而不使用ModelForm
    • instance = Model(**form_data.cleaned_data) 然后 instance.save() 也将对象保存在数据库中,对吧?
    猜你喜欢
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多