django - 如何在 Django 中呈现单个单选按钮选项?

标签 django django-templates

如果我的模型包含带有 RadioSelect 小部件的 ChoiceField,如何在模板中单独呈现单选按钮?

假设我正在构建一个 Web 应用程序,它允许公司的新员工选择他们想要的桌面计算机类型。这是相关模型:

class ComputerOrder(forms.Form):
    name = forms.CharField(max_length=50)
    office_address = forms.Charfield(max_length=75)
    pc_type = forms.ChoiceField(widget=RadioSelect(), choices=[(1, 'Mac'), (2, 'PC')])

在模板上,如何仅渲染 Mac 选择按钮?如果我这样做,它会呈现所有选择:
{{ form.pc_type  }}

我有点天真地尝试了这个,但它没有产生任何输出:
{{ form.pc_type.0 }}

(我在这里发现了一些类似的问题:

In a Django form, how do I render a radio button so that the choices are separated on the page?
Django Forms: How to iterate over a Choices of a field in Django form

但我不觉得他们有很好的答案。有没有办法让老问题复活?)

最佳答案

Django 1.4+ allows you to iterate超过 RadioSelect 中的选择,以及

{% for choice in form.pc_type %}
  {{ choice.choice_label }}
  <span class="radio">{{ choice.tag }}</span>
{% endfor %}

我不确定此更改是否允许您使用您描述的语法( {{ form.pc_type.0 }} ) - 如果没有,您可以使用 for 解决此限制在上面循环和一个标签,如 {% if forloop.counter0 == 0 %} .

如果你绑定(bind)到 Django < 1.4,你可以覆盖 render()按照建议的方法或使用稍微更详细但不太复杂的选项在模板中自己构建表单字段:

 {% for choice in form.pc_type.field.choices %}
   <input name='{{ form.pc_type.name }}' 
     id='{{ form.pc_type.auto_id }}_{{ forloop.counter0 }}' type='radio' value='{{ choice.0 }}'
     {% if not form.is_bound %}{% ifequal form.pc_type.field.initial choice.0 %} checked='checked' {% endifequal %}
   {% else %}{% ifequal form.pc_type.data choice.0 %} checked='checked' {% endifequal %}{% endif %}/>
   <label for='{{ form.pc_type.auto_id }}_{{ forloop.counter0 }}'>{{ choice.1 }}</label>
 {% endfor %}

( choice.0choice.1choices 双元组中的第一项和第二项)

关于django - 如何在 Django 中呈现单个单选按钮选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10237140/

相关文章:

python - 找不到页面(404)django

django - django 中的自定义登录 URL

django 'thumbnail' 不是有效的标签库 :

javascript - 使用 django html 模板创建具有动态行和列的表

python - 无法启动 python manager.py runserver

django - django中区分上下文、请求上下文

django - 有条件地选择序列化程序

Django:如何以递增顺序显示页面序列号

django - 无法解析余数

python - Django 表单 - 使用数据库中的变量