実現したいこと
djangoでformで入力されたデータを保存し、次のページで表示したい。
modelは2種類あり、1種類はフォームから入力、もう1種類は入力されたデータを基に計算して算出した値を代入したい。
現在のソースコードではフォームから入力し、それを表示するだけになっている。
home.htmlでフォームを入力させ、routesearch.htmlで入力内容を表示させたい。
発生している問題・分からないこと
次のページに行っても入力された内容が表示されない。
入力内容を変数などに取り出す方法がわからない。
該当のソースコード
models.py
1from django.db import models 2 3class Spot(models.Model): 4 purpose = models.CharField(max_length=128) 5 route = models.CharField(max_length=128, blank=True) 6 7 def __str__(self): 8 return self.purpose 9
forms.py
1from django import forms 2from my_app.models import Spot 3 4class PurposeForm(forms.ModelForm): 5 class Meta(): 6 model = Spot 7 fields = ('purpose',) 8 exclude= ('route',)
views.py
1from django.shortcuts import get_object_or_404, redirect, render 2 3from my_app.models import Spot 4from . import forms 5 6from myproject.routesearch.routesearch import routesearch 7 8 9def create_route(request): 10 #モデルのインスタンス作成 11 spot = Spot() 12 13 if request.method == "POST": 14 form = forms.PurposeForm(request.POST, instance=spot) 15 16 #フォームが正常であれば 17 if form.is_valid(): 18 form.save() 19 20 spot = form.save(commit=False) 21 spot.save() 22 return redirect('my_app/routesearch.html') 23 24 else: 25 form = forms.PurposeForm(instance=spot) 26 return render(request, "my_app/home.html", {'form': form}) 27 28 29def display_route(request): 30 data = Spot.objects.all() 31 return render(request, 'my_app/routesearch.html', {'data': data}) 32
home.htmls
1<!DOCTYPE html> 2<html lang="ja"> 3<html> 4 <head> 5 <meta charset="utf-8" /> 6 <title>My App</title> 7 </head> 8 9 <body> 10 <h1>My App</h1> 11 <p> 12 Input purpose 13 </p> 14 <form 15 action="{% url 'my_app:routesearch' %}" 16 method="post" 17 > 18 {{ form.as_p }} 19 {% csrf_token %} 20 <button type="submit">RouteSearch</button> 21 </form> 22 </body> 23</html>
routesearch.html
1<!DOCTYPE html> 2<html lang="ja"> 3<html> 4 <head> 5 <meta charset="utf-8" /> 6 <title>M App</title> 7 </head> 8 9 <body> 10 {% for spot in spot %} 11 <tr> 12 <th>{{ data.purpose }} 13 <th>{{ data.route }} 14 </tr> 15 {% endfor %} 16 </body> 17</html>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
様々な実装例を確認して変更を施した。
request.methodの判定をしているif文の中身をどのようにすればよいのか調べ、create_route関数内を成功している事例に近づけたが、結果は変わらなかった。
いろいろ試してみた結果、フォームは正しく機能しているが、そのフォームの中身がデータベースに反映されていないことが原因だと考えられる。
![guest](/img/icon/icnUserSample.jpg)
回答1件
あなたの回答
tips
プレビュー