2015-05-29 77 views
1

我有一個模型,其中包含問題的模型,然後是一個名爲Answers(與通過ForeignKey的問題相關)的模型,每個問題的答案都不同。如何創建一個表單這些問題,並且有關於這個問題的每個答案都像一個子項目一樣咆哮着他們?像這樣:在Django中創建一個包含子條目的清單

[]什麼是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,) 

但我不知道我怎麼能添加答案作爲子項目。

如果選中,我也想檢索這個問題以及下面的所有答案。那可能嗎?

UPDATE: 這就是我想要做的,但使用形式salty-lowlands-6607.herokuapp.com

回答

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它會在項目啓動時創建表單類別,如果稍後出現在數據庫中,則不會添加任何新問題。將這個表單類創建代碼放入您的視圖中。

+0

非常感謝您的幫助,但您的解決方案會爲每個答案創建一個複選框。我想創建的每個問題只有一個複選框,所有答案都在下面,所以如果選擇了這個問題,我可以檢索問題本身和所有答案。我可以使用模板語言創建它,你可以在https://salty-lowlands-6607.herokuapp.com/看到它,但它太亂了,我寧願使用這些表單。 –

+0

heroku鏈接已死亡。你可以發佈截圖和答案,如果你有它的工作? – szeitlin

相關問題