【问题标题】:Get Model instance from Form without saving从表单获取模型实例而不保存
【发布时间】:2011-04-27 10:36:10
【问题描述】:

假设我有一个 django ModelForm,我想在保存之前对其进行编辑。

例如,

不是这个

model_instance = form.save()

我想做这样的事情

model_instance = form.get_model()
model_instance.edit() #say add a new field which is not available on form
model_instance.save()

【问题讨论】:

    标签: django django-forms


    【解决方案1】:
    model_instance = form.save(commit=False)
    

    将返回模型对象而不保存到数据库

    然后您可以添加表单上不可用的某些字段的值

    model_instance.some_field = value
    model_instance.save()
    

    【讨论】:

    • 我刚刚在某个地方找到了它,并且正在自己添加答案的路上。 :)
    • 如果你使用form.save(commit=False),django不会保存ManyToMany关系。您必须在自己保存实例后调用form.save_m2m()Django ModelForms#Save
    • 谢谢。让我感到困惑的是,我想引用 form.instance,但它只有在调用 save() 后才可用。
    【解决方案2】:

    还有:

    model_instance = form.instance
    # edit
    model_instance.save()
    

    【讨论】:

    • 截至 2016 年,这是最佳实践吗?
    • 如果您尝试从 init 或 ModelForm 实例的任何方法获取模型实例,只需调用 self.instance 即可将模型绑定到 ModelForm。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2014-05-22
    相关资源
    最近更新 更多