0

簡単なクイズアプリを作ろうとしています。フォームウィザードを使用しようとしていますが、フォームフィールドの選択肢の設定に関するドキュメントに何も表示されません。また、同じフォームフィールドを複数回使用したいと思います。

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

1 に答える 1

0

選択に関しては、モデルフィールドと同じフォームフィールドの概念です。モデルフィールドのリファレンスは次のとおりです。

多くの選択肢を追加する予定がない限り、そのためのテーブルを用意するべきではありません。モデルを変更できます。

CHOICES = ((1,'One'),(2,'Two'))

class Question(models.Model):
    choices = models.IntegerField(choices=CHOICES)

上記のように構造化すると、aModelFormは期待どおりに動作し、choicesフィールドに適切な選択肢を使用してドロップダウンをレンダリングします。

フィールドの再利用に関しては、djangoの組み込みフォームフィールドはそのために設計されています。ビルトインが自分に合わない場合は、独自のカスタムフォームフィールドを作成して再利用することもできます。

モデルのフォームを作成する場合は、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-26T19:33:21.810 に答える