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

时间:2011-04-22 22:40:28

标签: django django-forms

任何人都能解释一下吗?表单验证方法更新相关模型真的不直观。我理解它不会提交数据库,但为什么甚至修改内存中的模型?为什么不用form.save()?

1 个答案:

答案 0 :(得分:3)

我相信原因是:

  

第一次调用is_valid()或   访问a的errors属性   ModelForm总是触发形式   验证,但从Django 1.2开始,它   还将触发模型验证。   这具有清洁的副作用   传递给ModelForm的模型   构造函数。例如,打电话   表单上的is_valid()将转换   模型上的任何日期字段   实际日期对象。

来自here。从逻辑上讲,这确实有意义。假设我有这样的模型:

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

然后就模型形式而言,验证字段TextInputField将适用于任何值。但是,从模型的角度来看,不会有任何价值 - 该价值必须是唯一的。

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

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

if form.is_valid():

真的应该确保:

    form.save()

实际上可以发生。