0

我正在尝试制作一个简单的测验应用程序。我正在尝试使用表单向导,但我在文档中没有看到任何关于设置表单字段选择的内容。我也想多次使用同一个表单域。

模型.py

class Choice(models.Model):
    choice = models.CharField(max_length=64)
    def __unicode__(self):
        return self.choice

#create a multiple choice quiz to start
class Question(models.Model):
    question = models.CharField(max_length=64)
    answer = models.CharField(max_length=64)
    choices = models.ManyToManyField(Choice)
    module = models.CharField(max_length=64)

    def __unicode__(self):
        return self.question

class Quiz(models.Model):
    name = models.CharField(max_length=64)
    questions = models.ManyToManyField(Question)

    def __unicode__(self):
        return self.name

视图.py

class QuizWizard(SessionWizardView):
    def done(self, form_list, **kwargs):
        return render_to_response('done.html', {
            'form_data':[form.cleaned_data for form in form_list],
        })

网址.py

url(r'^answer/(?P<question_id>\d+)', 'quiz.views.answer_question', name='answer_question'),
4

1 回答 1

0

在选择方面,表单字段的概念与模型字段的概念相同。这是模型字段的参考。

除非您打算添加许多选择,否则您不应该为此设置一张桌子。你可以改变你的模型:

CHOICES = ((1,'One'),(2,'Two'))

class Question(models.Model):
    choices = models.IntegerField(choices=CHOICES)

如果您像上面那样构建它,那么 a将按照您的期望进行操作,并为该字段ModelForm呈现一个带有正确选择的下拉列表。choices

至于字段重用,django 的内置表单字段就是为此而设计的。如果内置插件不适合您并重复使用它们,您还可以创建自己的自定义表单字段。

如果您正在为模型创建表单,请阅读ModelForm文档。 ModelForms 类似于常规表单,但需要处理很多工作 - 例如呈现与您的模型匹配的字段、输入验证、保存新记录等。

--

我知道如何为字段设置选项,但是当我使用表单向导并传入表单时,我不知道如何为字段设置选项。我无法在表格中设置选项,因为每个问题都会改变,而且我对每个问题都使用相同的表格

如果要从模型的实例中为表单设置选项,则需要首先获取实例,然后将其传递给表单类:

class QuestionForm(forms.ModelForm):
    class Meta:
        model = Question

question_form = QuestionForm() # empty form
a_question = Question.objects.get(pk=1)
another_form = QuestionForm(instance=a_question) # "prefilled" form

现在another_form将从a_question实例中填充值。

于 2013-03-26T19:33:21.810 回答