回答編集履歴

2

create_route関数を追記しました。

2024/07/21 03:17

投稿

yametai
yametai

スコア262

test CHANGED
@@ -54,3 +54,50 @@
54
54
  データベースオブジェクトを生成するのは本当に必要になったとき(if true)だけにした方が良いかなと思いました。
55
55
  フレームワークが色々やってくれるのは便利ですが、基本通りにやらないと何が影響して問題になっているのかわからなくなってしまいそうですので、最初はシンプルにドキュメント通りにやってみるのが良いかなと思います。
56
56
 
57
+ ### 追記2です。
58
+
59
+ コメントありがとうございます。
60
+
61
+ > modelの中身のうち、片方のみを入力させるようなフォームにしてもう片方は入力された結果から計算して求めるという形をとりたい
62
+
63
+ purposeはユーザーが入力、routeはプログラムによって計算されたものということですね。
64
+ コメントのコードを元に少し修正してみました。
65
+ コード内のコメントのリンク先も参照してみてください。
66
+
67
+ ```py
68
+ def create_route(request):
69
+ if request.method == "POST":
70
+ form = forms.PurposeForm(request.POST)
71
+ if form.is_valid():
72
+ # spotのインスタンスが無駄に生成されてしまっていましたのでリンク先を参考に修正してみました。
73
+ # [モデルからフォームを作成する | Django ドキュメント | Django](https://docs.djangoproject.com/ja/5.0/topics/forms/modelforms/#the-save-method)
74
+ # save() メソッド
75
+ spot = form.save(commit=False)
76
+ spot.created_route = "created_route"
77
+ spot.save()
78
+ # リダイレクトにテンプレートを記述しているっぽい?ところが気になりました。リンク先も参照してみてください。
79
+ # [フォームを使う | Django ドキュメント | Django](https://docs.djangoproject.com/ja/5.0/topics/forms/#the-view)
80
+ # [Django のショートカット関数 | Django ドキュメント | Django](https://docs.djangoproject.com/ja/5.0/topics/http/shortcuts/#redirect)
81
+ return redirect('my_app/display.html')
82
+ else:
83
+ form = forms.PurposeForm()
84
+ return render(request, "my_app/home.html", {'form': form})
85
+ ```
86
+
87
+ > うまく保存されていないようです。
88
+
89
+ これはどのように確認されていますでしょうか?
90
+ Djangoのデータベースを操作する部分はPythonの対話シェルから確認することができます。
91
+ 続きの部分はリンク先を参照してSpotが取得できるか確認してみると良いかなと思います。
92
+ (Webから表示確認する部分は一旦切り離して、一つずつ問題を解決していく方がスムーズかなと思います。)
93
+
94
+ > API で遊んでみる
95
+ >
96
+ > さぁ、 Python 対話シェルを起動して、 Django が提供する API で遊んでみましょう。 Python シェルを起動するには、以下のコマンドを実行します:
97
+ >
98
+ > ```sh
99
+ > python manage.py shell
100
+ > ```
101
+ >
102
+ > [はじめての Django アプリ作成、その 2 | Django ドキュメント | Django](https://docs.djangoproject.com/ja/5.0/intro/tutorial02/#playing-with-the-api)
103
+

1

空っぽのフォームを生成するコードを追記しました。

2024/07/21 01:30

投稿

yametai
yametai

スコア262

test CHANGED
@@ -34,3 +34,23 @@
34
34
  24行目のelseの方でもspotインスタンスが使われていて、そのあたりがどういう仕様になっているのか理解できませんでした・・
35
35
  見当違いでしたらごめんなさい・・
36
36
 
37
+ ### 追記です。
38
+
39
+ コメントありがとうございます。
40
+
41
+ > 仕様としては、method == "POST"の時にフォームの内容をモデルに保存し、そうでないときはreturn renderで同じページを表示させるという風に考えております。
42
+
43
+ 新規登録の際に、最初に空っぽのフォームを表示する処理(else)と、フォームを入力して送信した時に保存する処理(if true)ということですかね。
44
+
45
+ > ```py
46
+ > # if a GET (or any other method) we'll create a blank form
47
+ > else:
48
+ > form = NameForm()
49
+ > ```
50
+ >
51
+ > [フォームを使う | Django ドキュメント | Django](https://docs.djangoproject.com/ja/5.0/topics/forms/#the-view)
52
+
53
+ 最初に空っぽのフォームを表示するのは上の引用にある通りのようです。
54
+ データベースオブジェクトを生成するのは本当に必要になったとき(if true)だけにした方が良いかなと思いました。
55
+ フレームワークが色々やってくれるのは便利ですが、基本通りにやらないと何が影響して問題になっているのかわからなくなってしまいそうですので、最初はシンプルにドキュメント通りにやってみるのが良いかなと思います。
56
+