我有一个带有问题的模型,然后是一个名为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
答案 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它将创建表单类,在项目启动时,如果稍后出现在数据库中,则不会添加任何新问题。将此表单类创建代码放在视图中。