我们如何改变表单的结构,使输入不在标签中当我的表单呈现将显示如下:
<p>
<label for="id_form-0-food_name_0"><input checked="checked" id="id_form-0-food_name_0" name="form-0-food_name" value="" type="radio"> (Nothing)</label>
<label for="id_form-0-food_name_1"><input id="id_form-0-food_name_1" name="form-0-food_name" value="1" type="radio"> خوراک مرغ</label>
<label for="id_form-0-food_name_2"><input id="id_form-0-food_name_2" name="form-0-food_name" value="2" type="radio"> خوراک لوبیا</label>
<label for="id_form-0-food_name_3"><input id="id_form-0-food_name_3" name="form-0-food_name" value="3" type="radio"> فسنجون</label>
</p>
,但我需要input
s渲染出label
s标签。这样的:
<p>
<input checked="checked" id="id_form-0-food_name_0" name="form-0-food_name" value="" type="radio"><label for="id_form-0-food_name_0"> (Nothing)</label>
<input id="id_form-0-food_name_1" name="form-0-food_name" value="1" type="radio"><label for="id_form-0-food_name_1"> خوراک مرغ</label>
<input id="id_form-0-food_name_2" name="form-0-food_name" value="2" type="radio"><label for="id_form-0-food_name_2"> خوراک لوبیا</label>
<input id="id_form-0-food_name_3" name="form-0-food_name" value="3" type="radio"><label for="id_form-0-food_name_3"> فسنجون</label>
</p>
my forms.py:
class Reserve(ModelForm):
food_name = forms.ModelChoiceField(
queryset=Food.objects.all(),
widget=forms.RadioSelect(renderer=RadioFieldWithoutULRenderer),
empty_label="(Nothing)",
# label=''
)
class Meta:
model = Reservation
fields = ('food_name',)
和form.html
<form method="post">
{% csrf_token %}
{% for form in formset %}
<p>
<input name="group1" type="radio" id="test1" value="" />
{{ form.food_name }}
</p>
{% endfor %}
<button type="submit" class="btn btn-default">Submit</button>
您可以使用自定义模板创建自己的小部件:
- 在模板文件夹中创建一个模板文件(例如my_project/my_app/templates/my_app/widgets/radio_option.html):
{% include "django/forms/widgets/input.html" %}{% if widget.wrap_label %}<label{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %}>{{ widget.label }}</label>{% endif %}
(这个模板是从django/forms/templates/django/forms/widgets/input_option.html复制并稍微修改的,该模板默认用于无线电小部件)
- 在你的应用中创建一个自定义小部件:
- 使用
MyRadioSelect
代替RadioSelect
class MyRadioSelect(django.forms.RadioSelect):
option_template_name = "my_app/widgets/radio_option.html"