2013-03-26 58 views
0

我想做一個簡單的測驗應用程序。我正在嘗試使用Form Wizard,但在文檔中沒有看到爲表單字段設置選項的任何內容。我也想多次使用相同的表單域。在窗體嚮導中設置字段的選擇?

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

回答

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

如果要爲模型創建表單,請閱讀文檔ModelFormModelForm s爲像常規的形式,但大量的工作是照顧 - 像匹配您的模型呈現的字段,輸入驗證的新記錄保存等

-

我知道如何爲字段設置選項,但是當我使用表格 嚮導並傳遞表單時,我不知道如何爲字段設置選項 。我不能設置選項的形式,因爲它的每一個問題的變化 ,和我使用的是相同的形式,每一個問題

如果你想設置的選項的形式,從一個實例模型,那麼你需要先獲取該實例,然後將它傳遞到窗體類:

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

+0

我知道如何設置字段的選擇,但是當我使用Form Wizard並傳入表單時,我不知道如何設置字段的選項。我無法在表單中設置選項,因爲它會針對每個問題進行更改,而且我對每個問題都使用相同的表單。.... – Siecje 2013-03-26 20:12:49

相關問題