为与Django中另一个实例相关的每个模型实例创建一个表单字段

矩阵

我正在尝试使用Django编写考试系统。我有两个模型。考试,问题。

现在,我想创建一个表单,用户可以在其中回答问题。因此,我想为每个问题都提供一个字段。如何创建这样的表格?

UPD:以下是我的考试和问题模型代码

from django.db import models
from django.utils import timezone
from django_jalali.db import models as jmodels
from django.utils.translation import ugettext as _
from django.core.exceptions import ValidationError
from users.models import Member

# Create your models here.


class Exam(models.Model):
    name = models.CharField(max_length=500, verbose_name=_("Exam's name"))
    start_date = models.DateTimeField(_("Start Date"))
    end_date = models.DateTimeField(_("End Date"))

    class Meta:
        verbose_name = _("Exam")
        verbose_name_plural = _("Exams")

    def __unicode__(self):
        return self.name
    def stage(self):
        #raise ValueError("%d", self.end_date, datetime.now())
        if timezone.now() < self.start_date:
            return -1  # exam hasn't started yet
        elif timezone.now() >= self.end_date:
            return 1  # exam has ended
        else:
            return 0  # exam is running


class Question(models.Model):
    exam = models.ForeignKey(Exam, verbose_name=_("Related exam"))
    order = models.IntegerField(unique=True,
                                verbose_name=_("Question's index"),
                                help_text=_("Questions will be shown based on their index. Also this index is shown as the question's number in exam page"))
    statement = models.CharField(max_length=10000, verbose_name=_("Question's Statement"))

    def __unicode__(self):
        return self.exam.name + " - " + _("Question #") + str(self.order)

    class Meta:
        verbose_name = _("Question")
        verbose_name_plural = _("Questions")
        ordering = ['order']
双体船

您需要创建一个表单集。

好的,我会解释。首先,您应该使用question(隐藏)和answer(文本)字段创建Form

class AnswerForm(forms.Form):

    question = forms.ModelChoiceField(queryset=Question.objects.all(),
                                      widget=forms.HiddenInput)
    answer = forms.CharField(required=True)

接下来,创建表单集,其表单数等于考试中的问题数。对于每种形式,姓名首字母question将是具体考试的Question实例。表单集的处理是标准的,如文档中所述。

def pass_exam(request, exam_id):
    exam = get_object_or_404(Exam, pk=exam_id)
    questions = exam.question_set.all()
    num_questions = questions.count()
    AnswerFormSet = formset_factory(AnswerForm,
                                    max_num=num_questions, validate_max=True,
                                    min_num=num_questions, validate_min=True)
    initial = [{'question': q} for q in questions]
    if request.method == 'POST':
        formset = AnswerFormSet(request.POST, initial=initial)
        if formset.is_valid():
            for form in formset:
                question = form.initial['question']
                answer = form.cleaned_data['answer']
                # SAVE THE ANSWER HERE
            return redirect('exam_done')
    else:
        formset = AnswerFormSet(initial=initial)
    return render(request, 'app/pass_exam.html',
                  {'exam': exam, 'formset': formset})

最后回答-pass_exam.html为此表单集创建模板:

<h1>{{ exam }}</h1>

<form action="." method="POST">

    {% csrf_token %}
    {{ formset.management_form }}
    {{ formset.non_form_errors }}

    {% for form in formset %}
        <p>
            {{ form.initial.question.statement }}<br />
            {{ form.question }}
            {{ form.answer }}
            {% if form.errors %}
                {{ form.answer.errors }}
                {{ form.question.errors }}
            {% endif %}
        </p>
    {% endfor %}

    <button type="submit">Submit</button>

</form>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建另一个模型的实例时自动填充 Django 模型字段

来自分类Dev

将模型中字段的默认值设置为另一个模型实例

来自分类Dev

模型的每个实例都有另一个模型的一个或多个实例

来自分类Dev

如何基于另一个模型的实例在Django中创建模型,但已过滤

来自分类Dev

将模型的实例值传递给 django 中的另一个不同的模型实例

来自分类Dev

Django从另一个模型保存方法创建模型实例

来自分类Dev

克隆Django模型实例对象并将其保存到具有相同字段的另一个模型中

来自分类Dev

在Django中,如何获取一个模型的所有实例,而与fk的第一个模型相关的另一个模型的实例不存在?

来自分类Dev

Rails-从另一个模型中创建模型的实例

来自分类Dev

将实例变量从另一个模型传递到表单中

来自分类Dev

将Django模型实例保存到另一个模型中

来自分类Dev

在另一个 Python 脚本中使用 POST 方法创建 Django 模型实例

来自分类Dev

在另一个类中创建该类的实例

来自分类Dev

在Django中将字段从一个实例复制到另一个

来自分类Dev

创建为实例后,一个类如何从另一个类继承

来自分类Dev

Django-根据另一个字段过滤表单字段queryset

来自分类Dev

将子类模型实例转换为Django中的另一个子类模型实例?

来自分类Dev

在 Ruby on Rails 中自动填充嵌套表单字段的第一个实例

来自分类Dev

HTML。更改另一个表单字段时更改一个表单字段

来自分类Dev

如何将类的每个实例与另一个类的每个实例相关联?

来自分类Dev

在另一个文件中创建一个快速实例

来自分类Dev

从一个视图模型的当前实例的另一个实例中获取属性的值

来自分类Dev

从一个视图模型的当前实例的另一个实例中获取属性的值

来自分类Dev

为每个模型实例调用一个方法

来自分类Dev

最好为每个事件创建一个类的实例或为每个实例创建一个单独的实例?

来自分类Dev

在DRF中,如何正确显示一个模型中另一个模型的相关名称字段?

来自分类Dev

如何在实例化时在新类中创建另一个类的实例?

来自分类Dev

Django:从表单实例一个字段

来自分类Dev

是否将在C#中为类的每个实例创建一个属性实例?

Related 相关文章

  1. 1

    创建另一个模型的实例时自动填充 Django 模型字段

  2. 2

    将模型中字段的默认值设置为另一个模型实例

  3. 3

    模型的每个实例都有另一个模型的一个或多个实例

  4. 4

    如何基于另一个模型的实例在Django中创建模型,但已过滤

  5. 5

    将模型的实例值传递给 django 中的另一个不同的模型实例

  6. 6

    Django从另一个模型保存方法创建模型实例

  7. 7

    克隆Django模型实例对象并将其保存到具有相同字段的另一个模型中

  8. 8

    在Django中,如何获取一个模型的所有实例,而与fk的第一个模型相关的另一个模型的实例不存在?

  9. 9

    Rails-从另一个模型中创建模型的实例

  10. 10

    将实例变量从另一个模型传递到表单中

  11. 11

    将Django模型实例保存到另一个模型中

  12. 12

    在另一个 Python 脚本中使用 POST 方法创建 Django 模型实例

  13. 13

    在另一个类中创建该类的实例

  14. 14

    在Django中将字段从一个实例复制到另一个

  15. 15

    创建为实例后,一个类如何从另一个类继承

  16. 16

    Django-根据另一个字段过滤表单字段queryset

  17. 17

    将子类模型实例转换为Django中的另一个子类模型实例?

  18. 18

    在 Ruby on Rails 中自动填充嵌套表单字段的第一个实例

  19. 19

    HTML。更改另一个表单字段时更改一个表单字段

  20. 20

    如何将类的每个实例与另一个类的每个实例相关联?

  21. 21

    在另一个文件中创建一个快速实例

  22. 22

    从一个视图模型的当前实例的另一个实例中获取属性的值

  23. 23

    从一个视图模型的当前实例的另一个实例中获取属性的值

  24. 24

    为每个模型实例调用一个方法

  25. 25

    最好为每个事件创建一个类的实例或为每个实例创建一个单独的实例?

  26. 26

    在DRF中,如何正确显示一个模型中另一个模型的相关名称字段?

  27. 27

    如何在实例化时在新类中创建另一个类的实例?

  28. 28

    Django:从表单实例一个字段

  29. 29

    是否将在C#中为类的每个实例创建一个属性实例?

热门标签

归档