class Foo(models.Model):
isstore = models.BooleanField(maxlength=200)
rowkey = models.CharField(maxlength=200)
rowkey的验证,依赖与isstore,如果isstore为true,rowkey可以不能为空,反之可为空。
第一次:重写了Model的clean()方法
def clean(self):
if .... :
raise ValidationError(u"不能为空")
发现 验证生效,不过错误信息显示在表单最上面,没有出现在rowkey处
第二次:重写了Model的 clean_fields()方法,因为该方法下面 有 errors[field.name] = e.messages
怀疑这可能和 具体 field相关。不过最后发现不行,即使把这里的 重写为 pass 其他的验证依然有效,
可知,is_valid()并没有调用该方法,而是用其他的方法进行验证
第三次:参考了https://docs.djangoproject.com/en/dev/ref/forms/validation/ 和 google groups
相关帖子, 发现有个人和我问题一样,最后得出在model里面定义验证不能反映到具体form中,
于是修改 admin.ModelAdmin中的form
class TableForm(forms.ModelForm):
def clean(self):
self._validate_unique = True
self._errors["rowkey"] = self.error_class(['okok'])
return self.cleaned_data