我有一些带有两个urlfield的Form,两者都不是必需的。该表单用于从这两个urlfield中设置Model中的JSONField的值(为了方便用户),一切正常。如果用户在URL1或url2中输入URL以外的其他内容,则django将以“输入有效URL”的形式显示验证错误。
现在,我想让用户在这些urlfield中的任何一个中输入URL。我为此覆盖了干净的方法:
class MyForm(forms.ModelForm):
url1 = forms.URLField(required=False)
url2 = forms.URLField(required=False)
def clean(self):
cleaned_data = super(MyForm, self).clean()
if not cleaned_data['url1'] and not cleaned_data['url2']:
raise ValidationError(
_("You should enter at least one URL"),
code='no_urls'
)
return cleaned_data
有效,但是存在问题:如果用户在url1或url2中输入一些“非URL”数据并提交表单,则Django会引发带有异常值的KeyError:“ url1”(或“ url2”),而不是显示表单上的验证错误
怎么了?谢谢!
答案 0 :(得分:0)
如许多地方所记录-特别是the part about cross validation-,output
仅包含有效数据-未验证的字段不会在此处显示。您必须考虑一种或另一种方式-通过测试密钥是否存在或使用cleaned_data
as shown in the cross-validation example snippet来解决:
dict.get()