为什么我们在Django视图中使用form.save(commit = False)?

阿比舍克·库马尔(Abhishek kumar)

我无法理解为什么使用form.save(commit=False)而不是简单地使用form.savein的原因Django-views有人可以解释一下两者的区别和必要性吗?

本·博耶

form.save(commit=False)如果您正在使用ModelForm,则通常使用它。主要用例是,如果您的ModelForm不包含模型的所有必填字段。

您需要将此表单保存在数据库中,但是由于未将所有必填字段都提供给它,因此会出现错误。

因此,解决方案是使用commit = False保存表单,然后您可以手动定义所需的值,然后调用常规保存。

主要区别是commit = False不会将更改推送到数据库中,但是会创建它所需的所有结构,但是稍后您将不得不触发常规保存,否则您的表单将不会保存在数据库中。

举个例子:

#create a Dog class with all fields as mandatory
class Dog(models.Model):
    name = models.CharField(max_length=50)
    race = models.CharField(max_length=50)
    age = models.PositiveIntegerField()

#create a modelForm with only name and age
class DogForm(forms.ModelForm):
    class Meta:
        model = Dog
        fields = ['name', 'age']

#in your view use this form
def dog_view(request):
    ...
    form = DogForm(request.POST or None)
    #if the form is valid we need to add a race otherwise we will get an error
    if form.is_valid():
        dog = form.save(commit=False)
        #define the race here
        dog.race = 'Labrador retriever'
        #and then do the regular save to push the change in the database
        dog.save()
        ...

另一个例子是您要手动处理多对多关系。

示例列表很长,但总之很短,这是在您需要在数据库中保存模型之前执行中间步骤的时候。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Django ModelForm:save(commit = False)用于什么?

Django form.save(commit=False) 不添加 user_id

Django:在这种情况下我可以省略“.save(commit=False)”吗?

使用commit = False调用save()时,未调用Django的FileField“ upload_to”方法

Django:表单集 CBV 上的 save(commit=False) 正在触发自定义模型 save() 操作

Django ModelForm不保存添加到request.POST或通过form.save(commit = False)添加的数据

为什么我们应该在 git commit 命令中使用 -m?

为什么false ==“ false”是false?

当我们在jquery中使用每个函数时,我们应该添加return false,对吗?

为什么当我们在Javascript中放置false时valueOf()返回true

如果需要更改input_shape,为什么我们需要include_top = False?

我们是否应该在调用异步回调的库中使用ConfigureAwait(false)?

我们可以在Excel的IF函数的“ value_if_false”中使用公式吗?

为什么我们需要 git add?在 git commit 之前

使用auto commit = false进行回滚时会发生什么?

如何使用 commit=False 在 Django 上保存 m2m 字段?

为什么“ True or False”比“ False或True”要快?

为什么{} == {}等于false?

为什么[False]中的False == False会返回True?

为什么`True is False == False`,在Python中是False?

为什么“ False is False is False”评估为“ True”?

为什么“ False is False is False”评估为“ True”?

为什么“ True == False is False”评估为False?

为什么此打印仅“ false”而不是“ false false”?

为什么{} == false评估为false,而[] == false评估为true?

为什么(false || null)返回null,而(null || false)返回false?

为什么false &&(false)?false:true返回true

批处理更新:最后使用connection.commit()和setAutoCommit(false),但不会回滚数据

Android的SharedPreferences commit()何时返回false?