在表单向导中设置字段的选项?

时间:2013-03-26 19:23:27

标签: django python-2.7 django-forms

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

models.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

views.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],
        })

urls.py

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

1 个答案:

答案 0 :(得分:0)

在选择时,表单字段与模型字段的概念相同。 Here is the reference用于模型字段。

除非您打算添加许多选项,否则您不应该只为此提供表格。你可以改变你的模型:

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

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

如果您按照上面的方式对其进行结构设置,那么ModelForm将执行您所期望的操作,并使用choices字段的正确选项呈现下拉列表。

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

如果要为模型创建表单,请阅读ModelForm文档。 ModelForm就像常规形式,但很多工作都得到了处理 - 比如渲染与模型匹配的字段,输入验证,保存新记录等等。

-

  

我知道如何设置字段的选择,但是当我使用表单时   向导和传递形式,我不知道如何设置选择   对于一个领域。我无法在表单中设置选项,因为它会发生变化   对于每个问题,我对每个问题使用相同的表格

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

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实例填充值。