2012-04-16 71 views
3

我正在使用Django表单进行输入。不过,我想定制一点。例如,下面的Django的代码将被翻译成:如何在Django表单中添加标签ID

#Django code 

aerial_size_dist = forms.ChoiceField(initial='Very Fine to Fine') 

#Translated HTML 
<tr><th><label for="id_aerial_size_dist">Aerial size dist:</label></th><td><select name="aerial_size_dist" id="id_aerial_size_dist"></select></td></tr> 

我的问题是,如何从Django的侧作业的标签添加属性,如“风格”?小部件可以更改Django表单标签属性吗?

目标HTML

<tr><th><label for="id_aerial_size_dist" style="display:none;">Aerial size dist:</label></th><td><select name="aerial_size_dist" id="id_aerial_size_dist"></select></td></tr> 
+0

https://docs.djangoproject.com/en/dev/ref/forms/widgets/ yes你可以 – 2012-04-16 17:07:00

回答

5

类似的问题在这里得到解答: Get the ID of a field widget in a formset。 虽然它不允许你直接定制ID,它使用默认设置(自动生成)ID

(简答)在模板中使用这样的:

编辑:

<label for="{{ form.my_field.id_for_label }}">{{ form.my_field.label }}</label> 

旧的:(这在某些情况下不起作用 - 请参阅注释)

<label for="{{ form.my_field.auto_id }}">{{ form.my_field.label }}</label> 
+1

获取标签ID的正确方法是使用form.id_for_label。这种差异很微妙,但是使用auto_id会导致MultiValueField + MultiWidget的bug。 – hannson 2014-02-07 13:11:34

+0

感谢您的澄清。我要编辑帖子。 – darkless 2014-02-18 19:00:55

0
class FormName(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(FormName, self).__init__(*args, **kwargs) 
     self.fields['field_name'].widget.attrs['style'] = '...'