如何创建具有可变字段数的Django表单

时间:2018-09-29 20:59:07

标签: django django-models django-forms

我是Django的新手,正在尝试构建表单。这是一个有很多问题的调查应用。

型号: 我有2个模型QuestionsResponses。响应有2个字段。
-questionid,它是问题模型ID的外键
-response字段,它是1-5之间的整数。

所需表格 所需的表单列出了问题模型中的每个问题,然后列出了下面数字1-3的单选按钮。模板页面上可能有20个问题,每个问题都有3个单选按钮。该数据将被提交给响应模型。最后可能会有更多的单选按钮,为简单起见,显示为3。每个问题都将以1-3的比例回答。

让我感到困惑的是,我需要从questions.id模型中获取questions,但又以某种方式将其传递到response modelForm或表单中。用户应该不能指定question.id。

我不确定创建表单的最佳方法。

尝试1

template.py

<form action="/submit" method="post">
  {% csrf_token %}
  {% for question in questions %}
      <h2>id: {{ question.id }} - {{ question.question_title }}</h2>

      <fieldset id="{{ question.id }}">
        <label>1</label>
        <input type="radio" value="1" name="{{ question.id }}">
        <label>2</label>
        <input type="radio" value="2" name="{{ question.id }}">
        <label>3</label>
        <input type="radio" value="3" name="{{ question.id }}">
      </fieldset>

  {% endfor %}
  <br />
  <input type="submit" />
</form>

然后在我看来,将其保存到模型中。但是,那么对于像我这样的新手,我不知道如何显示表格错误等。

尝试2: 我尝试使用此设置为“响应”构造一个modelForm:

<form action="/submit" method="post">
  {% csrf_token %}
  {% for question in questions %}
      <h2>id: {{ question.id }} - {{ question.question_title }}</h2>

    {{ responseFrom.form }}

  {% endfor %}
  <br />
  <input type="submit" />
</form>

所有单选按钮冲突。例如。为问题1选择收音机1还会看到为其他所有问题选择的收音机1。我也想不出如何为响应模型指定Question.id外键。

如何创建一个具有动态数量输入字段的表单,该表单引用另一模型的ID?

您可以在form.py中执行此操作吗?它将支持错误和CSRF标签等?

0 个答案:

没有答案