【问题标题】:how to add attrs to many fields on a form?如何将属性添加到表单上的多个字段?
【发布时间】:2011-07-24 18:38:04
【问题描述】:

我有一个非常大的 ModelForm 并且想要实现 Ketchup jquery validation。我必须在我想要验证的每个表单字段中添加一个data-validate=,至少可以说它变得很费力。 目前我有这样的事情:

class AuthorForm(forms.ModelForm):

    class Meta:
        model = Author
    def __init__(self, *args, **kwargs):
        super(AuthorForm, self).__init__(*args, **kwargs)
        self.fields['name'].widget.attrs['data-validate'] = 'validate(required)'
        self.fields['email'].widget.attrs['data-validate'] = 'validate(required, email)'
        self.fields['is_alive'].widget.attrs['data-validate'] = 'validate(minselect(1))'
        self.fields['telephone'].widget.attrs['class'] = 'telephone'
        self.fields['telephone'].widget.attrs['data-validate'] = 'validate(required)'

但是还有大约 20 个字段要处理,我想知道是否有更简单的方法可以将这些属性添加到我想要验证的字段中。 (并非所有字段都必须验证,它们可以为空)

【问题讨论】:

    标签: jquery django django-forms


    【解决方案1】:

    甚至不知道 Ketchup 是什么,我点击了您的链接并找到了一个示例,说明如何在字段上不带属性的情况下进行操作,即将其传递给 ketchup() 方法:

    “在选项之后(这里为空{})我们传入一个对象。使用键来声明jQuery选择器在哪些字段上处理值中的验证。像这样声明的验证不需要验证( ) 指标。”

    $('#fields-in-call').ketchup({}, {
      '.required'    : 'required',              //all fields in the form with the class 'required'
      '#fic-username': 'username, minlength(3)' //one field in the form with the id 'fic-username'
    });
    

    如果您正在寻找替代库,我会选择 jQuery.validate

    【讨论】:

    • 我明白了。这很酷。但是,如果我这样做了,那么我仍然需要在 def__init__ right? 上的每个字段中添加一个类属性。这将导致完全相同的工作量。 self.fields['name'].widget.attrs['data-validate'] = 'validate(required)' 将变为 self.fields['name'].widget.attrs['class'] = 'required'
    • 不,您没有向字段添加类。您可以使用您想要的任何选择器,该示例只是为所需字段使用了一个类,因此他不必列出他想要要求的每个字段的名称或 ID。例如,您可以使用{'input[name=asdf], input[name=asdf2]' : 'required' } 而不是{'.required' : 'required'}
    • 您还可以在数据结构中设置验证规则并循环遍历数据结构或其他东西......
    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多