Django добавляет тот же атрибут класса ко всем полям одинакового типа
Есть ли какой-либо простой способ присвоить class=radio
всем элементам, чей виджет является радиоселектом в форме?
Я знаю, что могу написать такое, что
rb = forms.ChoiceField( widget=forms.RadioSelect(attrs='class':'radio'))
для всех переключателей в форме, но я думаю, что должны быть другие способы. Потому что я, вероятно, использую его для всех переключателей, и смешно писать это для всех.
Вы можете создать свой собственный виджет, например:
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)
как это?
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()
Еще в рубрике
- Вопросы
- Attributes
- Django добавляет тот же атрибут класса ко всем полям одинакового типа