【问题标题】:Removing initial value from form从表单中删除初始值
【发布时间】:2012-03-11 21:37:09
【问题描述】:

我有这样的表格:

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

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

【问题讨论】:

    标签: django forms validation


    【解决方案1】:

    您可以通过覆盖字段的 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
    

    【讨论】:

    • 由于某种原因你的方法不起作用,但我所做的就是改变我的看法:if request.method == 'POST': postdata = request.POST.copy() if postdata['link'] == 'http://': postdata['link'] = '' form = AddStoreForm(postdata) if form.is_valid: ...
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-09
      • 2013-06-11
      • 2019-08-01
      • 2017-06-10
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多