質問編集履歴

1

やりたいことの明確化、冗長性の排除

2021/03/21 05:50

投稿

f001
f001

スコア11

test CHANGED
File without changes
test CHANGED
@@ -2,53 +2,11 @@
2
2
 
3
3
 
4
4
 
5
+ プルダウンから選択された値を取得し、それを表示する機能を実装したいのですが、うまく動きません。
5
6
 
7
+ 具体的に、forms.py(↓) で作成したプルダウンに対し、
6
8
 
7
- base.html にプルダウンがあり、(base.htmlの画像↓)
8
-
9
- ![base.html](642625a06a0ba2c918c53414ed6f2a53.png)
10
-
11
-
12
-
13
- 上記プルダウンで選択された値がどこにどう入るのかを確認すべく、その値を result.html に表示するということをしています。
14
-
15
-
16
-
17
- 様々なサイトなり質問なりを見て、request.POST.get を用いることで ChoiceField から選択された値を取得できるということは分かったのですが、結果として取得できるものが全て None になっています。
18
-
19
- (result.html の画像↓)
20
-
21
- ![result.html](e0d065d028b3260e7f7007bd53d7e4a3.png)
22
-
23
-
24
-
25
- 明らかに何かおかしいと思い、views.py の result_page 内の results を確認してみたのですが、
26
-
27
- {'one': None, 'two': None}
28
-
29
- 上記のような形になっており、確かにこれでは None が出力されるのは当然だと思われます。
30
-
31
-
32
-
33
- ですが、なぜ None になるのかが分からず、手詰まり状態になっています。(半日治らず)
34
-
35
-
36
-
37
- **POST, GET の概念も多少曖昧かつ様々なサイトのコードをツギハギで書いていたことの弊害で、コード自体も不要な箇所がいくつかあると思われます。ですがひとまず、最終目的にあるように forms.ChoiceField でユーザーが選択した値を取得するためには (None✖︎)、どのような形で何を修正し、何を付け加えればよいのでしょうか。**
38
-
39
-
40
-
41
- よろしくお願い致します。
9
+ ```ここに言語を入力
42
-
43
-
44
-
45
- ※以下、forms.py, views.py, base.html, result.html
46
-
47
-
48
-
49
- ###### forms.py↓
50
-
51
- ```
52
10
 
53
11
  from django import forms
54
12
 
@@ -72,85 +30,13 @@
72
30
 
73
31
  test1_choice = forms.ChoiceField(label='年代', choices=test1, widget=forms.Select(attrs={'id': 'one'}))
74
32
 
33
+ ```
75
34
 
76
-
77
- test2 = [
78
-
79
- ('1', '気にしない'),
35
+ test1_choiceで選択された値を views.py (↓) で取得、辞書形式保存
80
-
81
- ('2', '喫煙者'),
82
-
83
- ('3', '禁煙者'),
84
-
85
- ]
86
-
87
- test2_choice = forms.ChoiceField(label='喫煙有無', choices=test2, widget=forms.Select(attrs={'id': 'two'}))
88
-
89
- ```
90
36
 
91
37
 
92
38
 
93
- ###### views.py↓
94
-
95
- ```
96
-
97
- from django.shortcuts import render
98
-
99
- from .forms import HelloForm
100
-
101
- from . import forms
102
-
103
-
104
-
105
- # base.html に表示する用
106
-
107
- def index(request):
108
-
109
- params = {
39
+ ```ここに言語を入力
110
-
111
- 'form': HelloForm(),
112
-
113
- 'check_result': None
114
-
115
- }
116
-
117
-
118
-
119
- # 年齢
120
-
121
- if request.method == 'POST':
122
-
123
- if 'test1_choice' in request.POST:
124
-
125
- age_val = request.POST['choice']
126
-
127
- params['check_result'] = '選択した値は' + age_val + 'です。'
128
-
129
- params['form'] = HelloForm(request.POST)
130
-
131
-
132
-
133
- # 喫煙
134
-
135
- if request.method == 'POST':
136
-
137
- if 'test2_choice' in request.POST:
138
-
139
- smoking_val = request.POST['choice']
140
-
141
- params['check_result'] = '選択した値は' + smoking_val + 'です。'
142
-
143
- params['form'] = HelloForm(request.POST)
144
-
145
-
146
-
147
- return render(request, 'myapp/base.html', params)
148
-
149
-
150
-
151
-
152
-
153
- # result.html に送る用?
154
40
 
155
41
  def result_page(request):
156
42
 
@@ -159,8 +45,6 @@
159
45
  if request.method == 'POST':
160
46
 
161
47
  results['one'] = request.POST.get("test1_choice")
162
-
163
- results['two'] = request.POST.get("test2_choice")
164
48
 
165
49
  c = {'results': results}
166
50
 
@@ -176,76 +60,14 @@
176
60
 
177
61
  ```
178
62
 
63
+ result.html で value を表示するという形で書いています。
179
64
 
180
-
181
- ###### base.html↓
65
+ ですが、結果として取得できる値がそもそもの views.py の時点で
182
-
183
- ```
184
-
185
- {% load static %}
186
66
 
187
67
 
188
68
 
189
- <html lang="ja">
69
+ ###### {'one': None}
190
70
 
191
71
 
192
72
 
193
- <head>
194
-
195
- <meta charset="utf-8">
73
+ となってしまい、プルダウンから選択された値ではなく None が出力されてしまいます。
196
-
197
- <title>test</title>
198
-
199
- <link href="{% static 'css/base.css' %}" rel="stylesheet" type="text/css">
200
-
201
- </head>
202
-
203
-
204
-
205
- <body>
206
-
207
-
208
-
209
- {{ form.as_p }}
210
-
211
- {% csrf_token %}
212
-
213
-
214
-
215
- <form action="{% url 'myapp:result' %}" method="POST">
216
-
217
- {% csrf_token %}
218
-
219
- <input type="submit" value="Button"/>
220
-
221
- </form>
222
-
223
- </body>
224
-
225
-
226
-
227
- </html>
228
-
229
- ```
230
-
231
-
232
-
233
- ###### result.html↓
234
-
235
- ```
236
-
237
- {% load static %}
238
-
239
-
240
-
241
- <form action="" method="post">{% csrf_token %}
242
-
243
- {% for key,val in results.items %}
244
-
245
- <h4>{{ val }}</h4>
246
-
247
- {% endfor %}
248
-
249
- </form>
250
-
251
- ```