2011-04-22 53 views

回答

3

我认为原因是这样的:

第一次调用is_valid()或 访问 的ModelForm的错误属性始终触发形式 验证,但作为Django的1.2,它 也会触发模型验证。 这具有清洁 您传递给ModelForm 构造函数的模型的副作用。例如,在窗体上调用 is_valid()将您的模型上的任何日期字段转换为 实际日期对象。

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

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

然后尽可能的的ModelForm而言,验证领域TextInputField将适用于任何价值。然而,从模型的角度来看,没有任何价值会做 - 这个价值必须是唯一的。

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

因此,它是有道理的,因为你的后卫:

if form.is_valid(): 

真的应该确保:

form.save() 

其实可以发生。