2013-06-03 4 views
5

Как мне изменить (т. Е. Добавить классы или изменить идентификатор) метки для флажков в MultipleChoiceField?Django как изменить метки меток для MultipleChoiceField?

В моей форме я это MultipleChoiceField

questions = forms.MultipleChoiceField(
     required=False, 
     label='', 
     widget=forms.CheckboxSelectMultiple, 
     choices=CHOICES, 
    ) 

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

<label for="id_questions_0"> 
    <input type="checkbox" name="questions" value="0"> 
    "the question" 
</label> 

Как отредактировать ярлык, чтобы я мог добавить к нему класс и изменить другие атрибуты метки?

+0

Вы можете настроить таргетинг атрибутов вокруг метки [for =]. Это поможет? – karthikr

+0

да, но где бы я это сказал? – bab

+1

в вашей таблице стилей. – karthikr

ответ

4

Вы можете использовать Widget.attrs, а именно:

questions = forms.MultipleChoiceField(
    required=False, 
    label='', 
    widget=forms.CheckboxSelectMultiple(attrs={'class': 'my-class'}), 
    choices=CHOICES, 
) 

Это относится my-class радио выбора. Если вам по-прежнему нужно добавить класс в label в качестве отображаемого, вам нужно будет customize forms.RadioSelect.

+0

Это изменяет только класс для флажков (что полезно, спасибо), но как я могу изменить класс меток для флажков? – bab

+0

@student ответ обновлен. – yuwang

+1

Я считаю, что изменить таблицу стилей проще, чем настраиваемый виджет. – yuwang

0

Спасибо, @yuwang, в восторге от того, что это также работает для ModelMultipleChoiceField (который позволяет отображать несколько флажков), как вы можете видеть ниже. В ModelMultipleChoiceFields очень мало документации, поэтому я хотел поделиться ею.

class ProposedFlagForm(ModelForm): 
    id = CharField(widget=HiddenInput()) 
    crs_sched_proposed_course = CharField(widget=HiddenInput()) 
    enrollment_flag = ModelMultipleChoiceField(required=False, 
               label='', 
               queryset=EnrollmentFlag.objects.all()\ 
                       .exclude(display='')\ 
                       .order_by('display'), 
               widget=CheckboxSelectMultiple) 
    class Meta: 
     model = CrsSchedProposedFlag 
     exclude = ('_updated','_updatedby') 
    #end Meta class 
#end ProposedFlagForm 
Смежные вопросы