如何在 Django 中创建“填空”表单

Posted

技术标签:

【中文标题】如何在 Django 中创建“填空”表单【英文标题】:How to create a 'fill in the blanks' form in Django 【发布时间】:2012-09-17 00:25:23 【问题描述】:

我想在 Django 中创建一个“填空”类型的测验。

示例问题是“将您的答案放在 __ 和 __ 处。”

所以基本上,我想要一个用输入字段替换“__”字段的输出。

另外,我希望输入字段具有相同的“名称”。示例:

<input id="id_1" type="text" name="blank[]" />
<input id="id_2" type="text" name="blank[]" />

空白字段的数量(可能)是无限的。如何使用 django.forms 来实现它?

谢谢。

【问题讨论】:

您知道在表单实例化时需要多少个空格吗? 使用表单集:docs.djangoproject.com/en/dev/topics/forms/formsets 空白字段的数量未知。这取决于给定问题的“__”数。现在查看表单集,看看我该如何使用它们。谢谢! 基本上,您创建一个字段的表单。然后,使用表单集,您可以在客户端创建任意数量的新表单(每个空白一个),并且 Django 将在提交后在服务器端为每个表单实例化一个表单实例。然后你就可以遍历表单集并做任何你喜欢的事情。 【参考方案1】:

据我了解,您有一个需要进行测验的字段列表。 所以列表看起来像这样:

questions = (
  ('Place your 1 answers %s and %s.', ('field_1_1', 'field_2_2')),
  ('Place your 2 answers %s and %s.', ('field_2_1', 'field_2_2')),
)

您可以像这样为每个字段创建表单:

class QuizzForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(QuizzForm, self).__init__(*args, **kwargs)
        for question in questions:
            for field in question[1]:
                self.fields[field] = forms.ChoiceField()

并在与此类似的帖子后访问字段:

if form.is_valid():
    for question in questions:
        for field in question[1]:
            answer = form.cleanded_data.get(field)

【讨论】:

以上是关于如何在 Django 中创建“填空”表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中创建表单和模型中使用的字段的单选按钮

如何在 Django 中创建一个分为两部分的注册表单,这样一个电话只有在电子邮件验证后才能填写第二部分?

如何使用 TemplateHTMLRenderer 在 Django-REST-Framework 中创建/放置?

如何从 django 的表单中获取数据?

在 django 中创建表单时对象不可调用错误

提交表单后,Django 清除表单字段。在 forms.py 中创建表单