1

Django で簡単な質問応答アプリを作成しています。私の単純化されたモデルは次のとおりです。

class Question(models.Model):
    question_text = models.TextField('Question', max_length=256)

class AnswerChoice(models.Model):
    choice_text = models.CharField('Choice', max_length=32)
    question = models.ForeignKey(Question)
    is_correct = models.BooleanField(default=False)

ModelForm上記の 2 つのモデル (QuestionFormおよび) に対して2 つの がありAnswerChoiceFormます。

ここで、質問を編集し、質問に 4 つの回答の選択肢を追加するために、HTML ページにaQuestionFormと 4を表示します。AnswerChoiceFormユーザーが正確に 1 つの回答を「正解」としてマークするようにしたいと考えています。

私のビュー機能は次のとおりです。

def edit_question(request):
    if request.method == 'POST':
        question_form = QuestionForm(request.POST)
        choice_forms = [AnswerChoiceForm(request.POST, prefix=str(i))
                        for i in xrange(4)]
        if all(c.is_valid() for c in choice_forms) and question_form.is_valid():
            choices = [c.save(commit=False) for c in choice_forms]
            question = question_form.save()
            for c in choices:
                c.question = question
                c.save()
            return HttpResponseRedirect(...) # show the question just added
     # ...

ここで、4つの選択肢のうち 1 つだけが正しいとマークされていることを確認したいと思います。上記のビュー関数でこのチェックを行うこともできますedit_questionが、どういうわけかそれは少し「間違っている」ようです。完全に満足していないビュー関数にコアロジックを追加しています。

QuestionmyまたはAnswerChoiceモデル、またはモデル フォームの定義でこの検証を行う方法はありますか?

示されているコードの量が十分であり、長くなりすぎないことを期待して、上記の完全な最小限のコードは提供していません。さらにコードを表示する必要がある場合は、お問い合わせください。この投稿を編集します。

4

2 に答える 2