改变表单的结构,使输入不在标签中



我们如何改变表单的结构,使输入不在标签中当我的表单呈现将显示如下:

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

您可以使用自定义模板创建自己的小部件:

  1. 在模板文件夹中创建一个模板文件(例如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复制并稍微修改的,该模板默认用于无线电小部件)

  • 在你的应用中创建一个自定义小部件:
  • class MyRadioSelect(django.forms.RadioSelect):
        option_template_name = "my_app/widgets/radio_option.html"
    
  • 使用MyRadioSelect代替RadioSelect
  • 最新更新