Python 如何使用django表单集进行问卷调查

Python 如何使用django表单集进行问卷调查,python,django,django-forms,formsets,Python,Django,Django Forms,Formsets,我正在做一个应用程序,现在我需要做一个用户可以接受的评估,我的问题是我想用一个表格集列出问题和各自的选择,我知道这可以通过使用表格集来完成,但不能通过这种方式来完成。以下是我的代码: # models.py class Evaluation(models.Model): """ An evaluation is for a session. Each session should have an evaluation """ session = mode

我正在做一个应用程序,现在我需要做一个用户可以接受的评估,我的问题是我想用一个表格集列出问题和各自的选择,我知道这可以通过使用表格集来完成,但不能通过这种方式来完成。以下是我的代码:

# models.py

class Evaluation(models.Model):
    """
    An evaluation is for a session.
    Each session should have an evaluation
    """
    session = models.OneToOneField(
        Session,
        related_name='evaluation',
        verbose_name=u'Sesión'
    )

    class Meta:
        verbose_name = u'Evaluación'
        verbose_name_plural = u'Evaluaciones'

    def __unicode__(self):
        return u'Evaluación de la sesion {0}'.format(
            self.session.name
        )


class Question(models.Model):
    """
    A question inside of an evaluation
    """
    evaluation = models.ForeignKey(
        Evaluation,
        verbose_name=u'Evaluación',
        related_name='questions'
    )
    question_type = models.CharField(
        max_length=20,
        verbose_name=u'Tipo de respuesta',
        choices=QUESTION_TYPES
    )
    sentence = models.CharField(
        max_length=255,
        verbose_name=u'Pregunta'
    )
    position = models.IntegerField(
        default=0,
        verbose_name=u'Posición'
    )

    class Meta:
        verbose_name = u'Pregunta'
        verbose_name_plural = u'Preguntas'
        ordering = ['position', 'sentence']

    def __unicode__(self):
        return self.sentence


class Choice(models.Model):
    question = models.ForeignKey(
        Question,
        related_name='choices',
        verbose_name=u'Pregunta'
    )
    sentence = models.CharField(
        max_length=255,
        verbose_name=u'Posible respuesta'
    )
    position = models.IntegerField(
        default=0,
        verbose_name=u'Posición'
    )

    class Meta:
        verbose_name = u'Posible respuesta'
        verbose_name_plural = u'Posibles respuestas'
        ordering = ['position', 'sentence']

    def __unicode__(self):
        return self.sentence

----

# forms.py

from django.forms.models import inlineformset_factory
from models import Evaluation, Question


AnswerFormSet = inlineformset_factory(
    Evaluation, Question, exclude=('question',),
    extra=0, can_delete=False
)

----

# views.py

@login_required()
def session_evaluation(request, course_slug, session_position):
    data = {}
    course = get_object_or_404(Course, slug=course_slug)
    session = Session.objects.filter(course=course).get(position=session_position)
    evaluation = get_object_or_404(Evaluation, session=session)
    if request.method == 'POST':
        formset = AnswerFormSet(request.POST, instance=evaluation)
        if formset.is_valid():
            formset.save()
            print 'formset valid...'
    else:
        formset = AnswerFormSet(instance=evaluation)
    data['course'] = course
    data['session'] = session
    data['formset'] = formset
    return render(request, 'courses/session_evaluation.html', data)

----

# template.html
<form id="evaluation" method="post" role="form">
    {% csrf_token %}
    {{ formset.management_form }}
    <ul class="evaluation">
        {% for form in formset.forms %}
            <li>
                {{ form.instance }}
                {{ form.instance.choices.all }}
            </li>
        {% endfor %}
    </ul>
    <div class="form-group clearfix nmb">
        <button type="submit" class="btn btn-primary pull-right">Enviar respuestas</button>
    </div>
</form>
正如你所看到的,我已经很好地编写了模型,但是从表单上看,所有的代码都只是一个实验,我真的不知道怎么做

我在这个代码模板中得到的是问题句和选项列表,类似于:

[question sentence here]? [<Choice: [choice #1 here]>, <Choice: [choice #2 here]>] 
使用表单集的干净和简单的方法是什么

我想得到的是一个问题列表,带有单选按钮的相应选项列表,因为这是一个评估。

应该是{{form.as\u p}}还是{form.as\u table}?该实例已在视图中创建,因此无需在模板中使用