Django добавляет один и тот же атрибут класса во все поля одного типа - PullRequest
2 голосов
/ 26 мая 2011

Есть ли простой способ присвоить class=radio всем элементам, виджет которых является radioselect в форме?Я знаю, что могу написать так, что

rb = forms.ChoiceField( widget=forms.RadioSelect(attrs='class':'radio'))

для всех переключателей в форме, но я думаю, что должны быть другие способы.Потому что я, вероятно, использую его для всех радиокнопок, и не смешно писать это для всех.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Вы можете создать свой собственный виджет, например:

class MyRadioSelect(forms.RadioSelect):

    def __init__(self, *args, **kwargs):
         attrs = kwargs.pop("attrs", {})
         if "class" in attrs:
             attrs["class"] = "%s radio" % attrs["class"]
         else:
             attrs["class"] = "radio"
         kwargs["attrs"] = attrs
         super(MyRadioSelect, self).__init__(*args, **kwargs)
1 голос
/ 26 мая 2011

как это?

class ClassyRadioSelect(forms.RadioSelect):
    def __init__(self, *args, **kwargs):
        #yes, i've to look up how to process args and kwargs properly
        attrs = kwargs.get('attrs', {})
        attrs['class'] = ' '.join((attrs.get('class',''), 'radio'))
        kwargs['attrs'] = attrs
        super(ClassyRadioSelect, self).__init__(*args, **kwargs)

class ClassyChoiceField(forms.ChoiceField):
    def __init__(self, choices=(), required=True, widget=None, label=None,
                 initial=None, help_text=None, *args, **kwargs):
        if not widget:
            widget = ClassyRadioSelect()
        super(ClassyChoiceField, self).__init__(choices, required, widget, label
                                                , initial, help_text, *args,
                                                **kwargs)

class MyForm(forms.Form):
    classy_field1 = ClassyChoiceField()
    classy_field2 = ClassyChoiceField()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...