在Django中创建一个包含子项的清单

时间:2015-05-29 22:53:47

标签: django django-forms

我有一个带有问题的模型,然后是一个名为Answers的模型(通过ForeignKey与问题相关),每个问题都有不同的答案。我如何创建一个表单来创建一个包含问题的清单,并且每个答案都有答案关于这个问题,他们就像一个子项目?像这样:

[]什么是1 + 1?

A)1个
   B)2个
   C)3个
   d)4

目前我所拥有的是:

class ChecklistForm(forms.Form):
       question= Question.objects.all()

 Checklist=forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,queryset=question,)

但我不知道如何将答案添加为子项目。

如果选中,我还想检索问题以及所有答案。这可能吗?

更新: 这就是我尝试做的事情,但是使用表格salty-lowlands-6607.herokuapp.com

1 个答案:

答案 0 :(得分:0)

如果你有固定的问题数量

class ChecklistForm(forms.Form):
    answer1 = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                           queryset=Answer.objects.filter(question=question1))
    ...
    answer5 = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                           queryset=Answer.objects.filter(question=question5))

如果您想为数据库中存在的所有问题创建表单,您可以动态创建此类表单类

fields = {}

for question in Questions.objects.all():
    fields['answer{}'.format(question.pk)] =
        forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                           queryset=Answer.objects.filter(question=question)) 

ChecklistForm = type('CheckListForm', (forms.Form,), fields)

注意,不要在模块顶层执行此操作,b / c它将创建表单类,在项目启动时,如果稍后出现在数据库中,则不会添加任何新问题。将此表单类创建代码放在视图中。