20 мая 2009 г.

Django: RadioSelect для всех CharField с choices в форме

Давным-давно понадобилось мне сделать так, чтоб все поля с выбором значений в автогенерируемой django из модели форме были не селектами, а RadioButtons’ами. Задал я вопрос на форуме маньяков, но не получил на него ответа… Долгое время мне это было и не нужно, но теперь появилось осознание того, как это надо сделать.

Ниже код. В нем Zayavka – класс модели, ZayavkaForm – сгенерированная форма, __init__ - метод этой самой формы:



def __init__(self, *args, **kwargs):
opts = Zayavka._meta
for f in opts.fields:
if f.get_internal_type() == 'CharField' and f.choices:
ZayavkaForm.base_fields[f.name] = forms.CharField(label=zayavka.get_field(f.name).verbose_name,
help_text = zayavka.get_field(f.name).help_text,
widget=forms.RadioSelect(choices=zayavka.get_field(f.name).choices),
required=not(zayavka.get_field(f.name).blank))
super(ZayavkaForm, self).__init__(*args, **kwargs)

Может быть не очень изящно, но с задачей справляется.

Комментариев нет: