gpt4 book ai didi

django - 为什么 form.is_valid() 会更新 Django ModelForms 的相关模型?

转载 作者:行者123 更新时间:2023-12-01 09:29:55 26 4
gpt4 key购买 nike

谁能解释一下?表单验证方法会更新相关模型,这真的很不直观。我知道它不会提交给数据库,但为什么还要修改内存中的模型呢?为什么不用 form.save() 呢?

最佳答案

我认为原因是这样的:

The first time you call is_valid() or access the errors attribute of a ModelForm has always triggered form validation, but as of Django 1.2, it will also trigger model validation. This has the side-effect of cleaning the model you pass to the ModelForm constructor. For instance, calling is_valid() on your form will convert any date fields on your model to actual date objects.

来自 here .从逻辑上讲,这确实有道理。假设我有这样一个模型:

class SomeModel(models.Model):
Somefield = models.CharField(unique=True)

然后就模型形式而言,验证字段 TextInputField 对任何值都有效。但是,从模型的角度来看,并非任何值都可以——该值必须是唯一的。

描述了验证机制here .基本上,在模型上调用 full_clean 会导致该模型根据 OO 范例检查自己的字段。因此,出于这个原因,可以更新模型的内存图像,并验证它是否可以实际写入数据库。

因此这是有道理的,因为你的守卫:

if form.is_valid():

确实应该确保:

    form.save()

实际上可能发生。

关于django - 为什么 form.is_valid() 会更新 Django ModelForms 的相关模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5760744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com