任何人都能解释一下吗?表单验证方法更新相关模型真的不直观。我理解它不会提交数据库,但为什么甚至修改内存中的模型?为什么不用form.save()?
答案 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()
实际上可以发生。