我有一个django表单,首先通过调用form.is_valid()来验证其数据。如果不是,则重新显示表单,并显示有关无效数据的错误消息。 现在,如果is_valid()为true,我尝试将数据保存在ldap后端。如果form.cleaned_data与ldap数据类型不对应,我从ldap save方法得到一个Exception。现在我想在这种情况下做的是重新显示带有错误消息的表单,就像form.is_valid()之后发生的事情返回false一样。 我试过阅读一些文档和一些django源代码,但找不到我可以在哪里找到它。
另一种方法是仔细构建(自定义)表单字段的形式,以“保证”数据已完全符合ldap语法。 但我想知道我抓住ldap语法错误并以方便的形式显示它们。因此,如果我可以进入该形式,重新显示机制将使我成为一个快乐的小程序员: - )
任何想法或提示?
答案 0 :(得分:2)
在您的类扩展forms.Form
的类下,添加以下方法之一,假设您在某处定义了is_valid_ldap_data()
:
表示整个表格:
def clean(self):
if !is_valid_ldap_data(self.cleaned_data.get("fieldname")):
raise forms.ValidationError("Invalid LDAP data type");
return self.cleaned_data
或单个字段:
def clean_fieldname(self):
if !is_valid_ldap_data(self.cleaned_data['fieldname'])):
raise forms.ValidationError("Invalid LDAP data type");
return self.cleaned_data['fieldname']
答案 1 :(得分:1)
在您的Form子类中实现自定义字段验证方法
http://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute
验证逻辑必须到达它所属的位置。如果form.is_valid() == True
比form.cleaned_data
必须有效。仅仅因为代码是这样说的。你想在其他地方隐藏一些验证逻辑 - 这只是不好的做法。
答案 2 :(得分:0)
在我看来,您只需要额外的验证步骤 您可以,具体取决于您的具体需求:
但在每种情况下,如果表单因任何原因(如您的情况)无效,则is_valid应返回False。