如何以编程方式访问{{form.my_field.id_for_label}}?

时间:2017-03-21 08:28:14

标签: django django-forms

我的Django项目使用Bootstrap v4。

我遍历所有字段以添加HTML属性class="form-control"。我还需要添加一个HTML属性aria-describedby="{}Help",其中{}是小部件的id_for_label

在模板语言中,我可以使用{{ form.my_field.id_for_label }}轻松打印该值,但以编程方式我不知道该怎么做。

我用ModelForm().fields['…'].widget.id_for_label()尝试过,但该方法需要一个参数。通过查看Django源代码,返回值实际上就是参数。

有什么想法吗?

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'})

1 个答案:

答案 0 :(得分:1)

你可以这样自己构建:

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})