从表单中删除初始值

时间:2012-03-11 21:37:09

标签: django forms validation

我有一个这样的表格:

class StoreForm(forms.Form):
    title = forms.CharField()
    link = forms.URLField(verify_exists=True, required=False, initial='http://')

当我填写表单并保持链接字段不变时,我提出错误,因为http://显然不是有效链接。删除初始值以获得有效表单的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以通过覆盖字段的clean_foo()方法来播放提交的值。

class StoreForm(forms.Form):
    title = forms.CharField()
    link = forms.URLField(verify_exists=True, required=False, initial='http://')

    def clean_link(self):
        data = self.cleaned_data['link']
        if data == 'http://':
            return ''
        else:
            return data

答案 1 :(得分:0)

这样做的正确方法我认为会扩展默认小部件并覆盖value_from_datadict方法,如下所示:

您还可以在Field上覆盖clean()方法(扩展URLField)。

想法是检查是否value == initial并在这种情况下返回None

另请注意,verify_exists存在一些安全问题,如下所示: https://www.djangoproject.com/weblog/2011/sep/09/security-releases-issued/(通过URLField拒绝服务攻击)