Django:覆盖表单验证时urlfields验证出现问题

时间:2019-03-06 13:22:57

标签: django django-forms

我有一些带有两个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”),而不是显示表单上的验证错误

怎么了?谢谢!

1 个答案:

答案 0 :(得分:0)

如许多地方所记录-特别是the part about cross validation-,output仅包含有效数据-未验证的字段不会在此处显示。您必须考虑一种或另一种方式-通过测试密钥是否存在或使用cleaned_data as shown in the cross-validation example snippet来解决:

dict.get()