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
が、どういうわけかそれは少し「間違っている」ようです。完全に満足していないビュー関数にコアロジックを追加しています。
Question
myまたはAnswerChoice
モデル、またはモデル フォームの定義でこの検証を行う方法はありますか?
示されているコードの量が十分であり、長くなりすぎないことを期待して、上記の完全な最小限のコードは提供していません。さらにコードを表示する必要がある場合は、お問い合わせください。この投稿を編集します。