Могу ли я изменить класс виджета формы, не переопределяя его явно в Django?

Я пытаюсь изменить класс поля формы Django. Моя форма выглядит так:

class MyForm(forms.Form):
    my_field = forms.ChoiceField(choices=myChoices)

Почему работает только явное изменение класса поля Select? Мне нужен виджет Select по умолчанию, есть ли способ изменить его атрибуты без переопределения? Это работает:

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=myChoices, widget=forms.Select(attrs={'class': 'myclass'}))

Но это, что кажется логичным и простым, вызывает TypeError: __init__() got an unexpected keyword argument 'attrs'?

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=myChoices, attrs={'class': 'myclass'})

person YPCrumble    schedule 15.03.2014    source источник


Ответы (1)


Это больше кода, но если вы действительно не хотите определять класс типа виджета, вы можете сделать:

class MyForm(forms.Form):
    myfield = forms.ChoiceField(choices=myChoices)

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].widget.attrs={'class': 'myclass'}
person Brandon    schedule 15.03.2014