使用Django Forms或Django Floppyforms显示网格无线电表单

时间:2012-01-04 13:11:07

标签: django forms django-forms django-floppyforms

我想用这种格子制作一个表格:

Grid questions

你知道我怎么做吗?是否有Django Form小部件?

实际上,这是在网格中显示为无线电的相同选项列表的问题。

谢谢,

Natim

2 个答案:

答案 0 :(得分:4)

我用django表单执行此操作,网格上每行一个字段,其中ChoiceField和RadioSelect为小部件:

line1 = forms.ChoiceField(widget=forms.RadioSelect, choices=TRUC)
line2 = …

然后,您需要找到模板布局才能正确呈现。 RadioSelect生成<ul>,其中eahc选项为<li>。选择标签包含在<li>中,这不是您想要的。

使用floppyforms,您可以继承RadioSelect并为其指定cutom template_name(查看floppyforms/radio.html模板)以省略标签。您也可以更改它以表示(例如)表格单元格(<td> s)而不是<li>,并使表单标记生成一个表格,其中包含表格标题中的标签。

import floppyforms as forms

class RadioSelect(forms.RadioSelect):
    template_name = 'myforms/radio.html'

将您想要的行标记放在上面的模板中。

然后,在呈现表单的模板中:

<form method="post" action="youraction">
  <table>
    <thead>
      <td> <!-- put your form headers here --> </td>
    </thead>
    <tbody>
      {% for field in form %}
        <tr>
          <td>{{ field.label_tag }}</td>
          {{ field }}
        </tr>
      {% endfor %}
    </tbody>
  </table>
<!-- submit button -->
</form>

然后,只需应用几种CSS样式来获得所需的布局:)

答案 1 :(得分:1)

您可以尝试此字段django-radiogrid