前提・実現したいこと
現在、Djangoチュートリアルを終えたのでそのまま、下の画像のadminページのように、クライアント側がChoiceを自由に増やせるようなフォームをtemplate内でつくりたいと考えています。
しかし、うまいQuestionモデルとChoiceモデルの紐づけ方が分からず、それぞれ別のクラスでフォームを作成しました。そのため、Choiceモデルが一つしか作成できません。(下に画像があります)
改善点あるいは全く違った方法でもよいので教えてください。
該当のソースコード
Python
1# model.py 2class Question(models.Model): 3 question_text = models.CharField(max_length=200) 4 pub_date = models.DateTimeField("date published") 5 close_date = models.DateTimeField( 6 default=timezone.datetime.now() + timezone.timedelta(weeks=1) 7 ) 8 sum_votes = models.IntegerField(default=0) 9 10 def __str__(self): 11 return self.question_text 12 13class Choice(models.Model): 14 question = models.ForeignKey(Question, on_delete=models.CASCADE) 15 choice_text = models.CharField(max_length=200) 16 votes = models.IntegerField(default=0) 17 18 def __str__(self): 19 return self.choice_text
Python
1# form.py 2class QuestionForm(forms.ModelForm): 3 class Meta: 4 model = Question 5 fields = ("質問文",) 6 7 8class ChoiceForm(forms.ModelForm): 9 class Meta: 10 model = Choice 11 fields = ("選択肢",)
Python
1# view.py 2def question_create(request): 3 if request.method == "POST": 4 form1 = QuestionForm(request.POST) 5 form2 = ChoiceForm(request.POST) 6 if form1.is_valid() and form2.is_valid(): 7 question = form1.save(commit=False) 8 question.pub_date = timezone.now() 9 question.close_date = timezone.datetime.now() + timezone.timedelta(weeks=1) 10 question.save() 11 choice = form2.save(commit=False) 12 question.choice_set.add(choice, bulk=False) 13 question.save() 14 return redirect("polls:detail", pk=question.id) 15 else: 16 form1 = QuestionForm() 17 form2 = ChoiceForm() 18 19 context = { 20 "form1": form1, 21 "form2": form2, 22 } 23 return render(request, "polls/create/index.html", context)
html
1<!-- templates/polls/create/index.html --> 2<form method="POST">{% csrf_token %} 3 {{ form1.as_p }} 4 {{ form2.as_p }} 5 <button type="submit">Save</button> 6</form>
回答2件
あなたの回答
tips
プレビュー