获取Django表单以继承自定义字段属性的类

时间:2014-07-22 05:22:28

标签: django twitter-bootstrap-3 django-forms

我希望我的表单具有class='form-control'属性。

与添加:

相反
def __init__(self, *args, **kwargs):
        super(<form name>, self).__init__(*args, **kwargs)
        self.auto_id = False
        for key in self.fields:
            self.fields[key].widget.attrs.update(
                                            {'class' : 'form-control',
                                            'placeholder':self.fields[key].label
                                            })

对于每种形式,都会更容易:

class BootstrapForm(object):

    def __init__(self, *args, **kwargs):
        super(BootstrapForm, self).__init__(*args, **kwargs)
        self.auto_id = False
        for key in self.fields:
            self.fields[key].widget.attrs.update(
                                            {'class' : 'form-control',
                                            'placeholder':self.fields[key].label
                                            })

class LoginForm(forms.Form, BootstrapForm):
    #.... stuff ....

但这不起作用。

有没有用DRY原则解决这个问题?

1 个答案:

答案 0 :(得分:1)

不是应用mixin,而是定义一个基类Form类,在每个字段小部件上设置form-control类:

class BootstrapForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(BootstrapForm, self).__init__(*args, **kwargs)
        self.auto_id = False
        for key in self.fields:
            self.fields[key].widget.attrs.update(
                                            {'class' : 'form-control',
                                            'placeholder':self.fields[key].label
                                            })

然后,您的表单将继承自BootstrapForm

class LoginForm(BootstrapForm):
    # stuff

仅供参考,django-forms-bootstrap包采用另一种方法 - 它通过引入自定义on the fly模板过滤器添加form-control|as_bootstrap

<form>
    <legend>My Form</legend>
    {% csrf_token %}
    {{ form|as_bootstrap }}
    <div class="form-actions">
      <a href="#back" class="btn">Go back</a>
      <button type="submit" class="btn btn-primary">Save changes</button>
    </div>
</form>

另一方面,django-bootstrap3定义custom Field renderers,负责设置form-control class