2017-03-21 4 views
0

Mein Django-Projekt verwendet Bootstrap v4.Wie programmgesteuert auf {{form.my_field.id_for_label}} zugreifen?

I durchlaufen alle Felder, um das HTML-Attribut class="form-control" hinzuzufügen. Ich muss auch ein HTML-Attribut aria-describedby="{}Help" hinzufügen, wobei {} das id_for_label für das Widget ist.

In der Vorlage Sprache konnte ich diesen Wert einfach mit {{ form.my_field.id_for_label }} drucken, aber programmgesteuert weiß ich nicht, wie es geht.

Ich versuchte es mit ModelForm().fields['…'].widget.id_for_label(), aber diese Methode erwartet ein Argument. Und wenn man den Django-Quellcode betrachtet, ist der Rückgabewert buchstäblich das Argument.

Irgendwelche Ideen?

class AbonnentForm(ModelForm): 
    class Meta: 
     model = Abonnent 
     fields = '__all__' 



    def __init__(self, *args, **kwargs): 
     super(AbonnentForm, self).__init__(*args, **kwargs) 

     # Add Bootstrap class to all <input> elements. 
     for key, value in self.fields.items(): 
      value.widget.attrs.update({'class': 'form-control'}) 

      if value.help_text: 
       id_for_label = "{}Help".format(value.widget.id_for_label()) 
       value.widget.attrs.update({'aria-describedby': id_for_label}) 

     self.fields['erste_ausgabe'].widget.attrs.update({'placeholder':'MM/JJJJ'}) 
     self.fields['letzte_ausgabe'].widget.attrs.update({'placeholder':'MM/JJJJ'}) 

Antwort

1

Sie können es contruct sich wie folgt aus:

for key, value in self.fields.items(): 
    value.widget.attrs.update({'class': 'form-control'}) 

    if value.help_text: 
     django_id_for_label = self.auto_id % key # self.auto_id == 'id_%s' 
     my_id_for_label = '{}Help'.format(django_id_for_label) 
     value.widget.attrs.update({'aria-describedby': my_id_for_label}) 
Verwandte Themen