【问题标题】:Setting choices for a field in a Form Wizard?在表单向导中为字段设置选项?
【发布时间】:2013-03-26 19:23:26
【问题描述】:

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

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'),

【问题讨论】:

    标签: django python-2.7 django-forms


    【解决方案1】:

    在选择时,表单字段的概念与模型字段的概念相同。 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 文档。 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-19
    • 2016-02-25
    • 2011-03-29
    • 1970-01-01
    • 2020-05-25
    • 2010-10-28
    • 1970-01-01
    • 2014-03-12
    • 2023-03-20
    相关资源
    最近更新 更多