Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么form.is\u valid()会更新Django ModelForms的相关模型?_Django_Django Forms - Fatal编程技术网

为什么form.is\u valid()会更新Django ModelForms的相关模型?

为什么form.is\u valid()会更新Django ModelForms的相关模型?,django,django-forms,Django,Django Forms,有人能解释一下吗?表单验证方法会更新相关模型,这是非常不直观的。我知道它不会提交到数据库,但为什么还要修改内存中的模型呢?为什么不使用form.save()呢?我认为原因如下: 第一次调用是\u valid()或 访问数据库的errors属性 ModelForm总是触发form 验证,但从Django 1.2开始 还将触发模型验证。 这有清洁的副作用 传递给ModelForm的模型 构造器。例如,打电话 表单上的“”是否有效()将转换为 您的模型上的任何日期字段 实际日期对象 从。从逻辑上讲,这

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

我认为原因如下:

第一次调用是\u valid()或 访问数据库的errors属性 ModelForm总是触发form 验证,但从Django 1.2开始 还将触发模型验证。 这有清洁的副作用 传递给ModelForm的模型 构造器。例如,打电话 表单上的“”是否有效()将转换为 您的模型上的任何日期字段 实际日期对象

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

class SomeModel(models.Model):
    Somefield = models.CharField(unique=True)
然后,就模型表单而言,验证字段
TextInputField
对任何值都有效。但是,从模型的角度来看,任何值都不行——该值必须是唯一的

描述了验证机制。基本上,对模型调用
full\u clean
会导致该模型按照OO范式检查自己的字段。因此,可以更新模型的内存映像,并对其进行验证,以检查它是否可以实际写入数据库

因此它是有意义的,因为你的守卫:

if form.is_valid():
确实应该确保:

    form.save()
可能真的会发生