我有一个这样的表格:
class StoreForm(forms.Form):
title = forms.CharField()
link = forms.URLField(verify_exists=True, required=False, initial='http://')
当我填写表单并保持链接字段不变时,我提出错误,因为http://
显然不是有效链接。删除初始值以获得有效表单的最佳方法是什么?
答案 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拒绝服务攻击)