質問編集履歴

1

回答がなかなかありませんので質問を大幅に編集いたします。

2018/12/05 03:24

投稿

sr2460
sr2460

スコア50

test CHANGED
@@ -1 +1 @@
1
- <python django>コメント投稿フォーム表示されな
1
+ <python django>コメント投稿フォームをclassの継承を使って表示した
test CHANGED
@@ -1,3 +1,9 @@
1
+ djangoチュートリアルの投票アプリにコメント投稿フォームを加えたいです。
2
+
3
+
4
+
5
+ ### 前提・実現したいこと
6
+
1
7
  python=3.7.0
2
8
 
3
9
  django=(2, 0, 2, 'final', 0)
@@ -8,7 +14,7 @@
8
14
 
9
15
 
10
16
 
11
- この投票ページの直下にコメントフォームを置こうとしています表示がされません。
17
+ この投票ページの直下にコメントフォームを置こうとしています。投票時にユーザーになぜその選択肢を選んだかコメントをもらいたいのです。しかし実際にはコードを書いても表示がされません。
12
18
 
13
19
  ![イメージ説明](a6fcd183dc1d7a231bbd4eeece95b30b.png)
14
20
 
@@ -16,11 +22,109 @@
16
22
 
17
23
 
18
24
 
25
+ ### classの継承を試しました。
26
+
27
+ 上記画像のhtmlコードは
28
+
29
+
30
+
31
+ ```html
32
+
33
+ <h1>{{ question.question_text }}</h1>
34
+
35
+
36
+
37
+ {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
38
+
39
+
40
+
41
+ <form action="{% url 'polls:vote' question.id %}" method="post">
42
+
43
+ {% csrf_token %}
44
+
45
+ {% for choice in question.choice_set.all %}
46
+
47
+ <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
48
+
49
+ <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
50
+
19
- まずmodels.pyを作成
51
+ {% endfor %}
20
-
21
-
22
-
52
+
53
+
54
+
55
+
56
+
23
- ```
57
+ ```
58
+
59
+
60
+
61
+ urls.pyでclass DetailViewを呼び込んだため、detail.htmlにDetailViewの内容がhtmlに反映されています。(DetailViewの内容は本筋と関係ないと思ったため省略します。必要なら適宜記載します。)
62
+
63
+ ```python
64
+
65
+ path('<int:pk>/', views.DetailView.as_view(), name='detail'),
66
+
67
+ ```
68
+
69
+
70
+
71
+
72
+
73
+ ここからさらにフォームをhtmlに加えるためviews.pyでclassの継承を使いました。
74
+
75
+
76
+
77
+ views.py
78
+
79
+ ```python
80
+
81
+ class CommentView(DetailView):
82
+
83
+ def add(request):
84
+
85
+ context = {
86
+
87
+ 'form':CommentForm()
88
+
89
+ }
90
+
91
+ return render(request, 'polls/detail.html', context)
92
+
93
+
94
+
95
+ ```
96
+
97
+
98
+
99
+ さらにurls.pyも
100
+
101
+ ```python
102
+
103
+ path('<int:pk>/', views.CommentView.as_view(), name='detail'),
104
+
105
+ ```
106
+
107
+
108
+
109
+ に変更しました。
110
+
111
+ しかしこれでも表示は
112
+
113
+ ![イメージ説明](a6fcd183dc1d7a231bbd4eeece95b30b.png)
114
+
115
+ のまま変化しません。
116
+
117
+
118
+
119
+
120
+
121
+ ### そのほかの情報について
122
+
123
+ フォームを作るにあたってモデルを作る必要がありますのでmodels.pyに
124
+
125
+
126
+
127
+ ```python
24
128
 
25
129
  class Comment(models.Model):
26
130
 
@@ -30,11 +134,13 @@
30
134
 
31
135
 
32
136
 
137
+
138
+
139
+ comment_question = models.ForeignKey(Question, on_delete=models.CASCADE, blank=True, null=True,)
140
+
33
- #name = models.CharField('名前', max_length=50)
141
+ text_area = models.TextField('感想', blank=True)
34
-
35
- message = models.CharField('メッセージ', max_length=200)
142
+
36
-
37
- #created_at = models.DateTimeField(default=timezone.now)
143
+
38
144
 
39
145
 
40
146
 
@@ -50,17 +156,23 @@
50
156
 
51
157
 
52
158
 
53
-
159
+ これをフォーム形式に変換しなければなりませんので。
54
-
160
+
55
- それをforms.pyに受渡し
161
+ forms.pyにclass Commentを受渡しました。
56
-
162
+
163
+
164
+
165
+
166
+
57
- ```
167
+ ```python
168
+
169
+
58
170
 
59
171
  from django import forms
60
172
 
61
173
 
62
174
 
63
- from polls.models import Comment
175
+ from polls.models import Choice, Comment
64
176
 
65
177
 
66
178
 
@@ -74,158 +186,36 @@
74
186
 
75
187
  model = Comment
76
188
 
77
- fields = ('message',)
78
-
79
-
80
-
81
- ```
82
-
83
-
84
-
85
- views.pyも変更加えした
86
-
87
-
88
-
89
- ```
90
-
91
- from polls.forms import CommentForm
92
-
93
-
94
-
95
-
96
-
97
- from .models import Choice, Question, Comment
98
-
99
-
100
-
101
- def index(request):
102
-
103
- """メイン画面."""
104
-
105
- if request.method == 'POST':
106
-
107
- form = CommentForm(request.POST)
108
-
109
- if form.is_valid():
110
-
111
- form.save()
112
-
113
-
114
-
115
- else:
116
-
117
- form = CommentForm()
118
-
119
-
120
-
121
- ```
122
-
123
-
124
-
125
-
126
-
127
- detail.htmlはこのようになっています。
128
-
129
- ```
130
-
131
- <h1>{{ question.question_text }}</h1>
132
-
133
-
134
-
135
- {% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
136
-
137
-
138
-
139
- <form action="{% url 'polls:vote' question.id %}" method="post">
140
-
141
- {% csrf_token %}
142
-
143
- {% for choice in question.choice_set.all %}
144
-
145
- <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}">
146
-
147
- <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br>
148
-
149
- {% endfor %}
150
-
151
-
152
-
153
-
154
-
155
-
156
-
157
- ↓ここから下が今回質問しているフォーム部分です
158
-
159
- <input type="submit" value="投票">
160
-
161
-
162
-
163
- </form>
164
-
165
-
166
-
167
- <form action="/" method="post">
168
-
169
- {% csrf_token %}
170
-
171
- <h3>感想をどうぞ</h3>
172
-
173
- {{ form.as_p }}
174
-
175
- <input type="submit" value="送信">
176
-
177
- </form>
178
-
179
- ```
180
-
181
-
182
-
183
-
184
-
185
- 該当するurlsは
186
-
187
- ```
188
-
189
- from django.urls import path
190
-
191
-
192
-
193
- from . import views
194
-
195
-
196
-
197
- app_name = 'polls'
198
-
199
- urlpatterns = [
200
-
201
- path('', views.IndexView.as_view(), name='index'),
202
-
203
- path('<int:pk>/', views.DetailView.as_view(), name='detail'),
204
-
205
- path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
206
-
207
- path('<int:question_id>/vote/', views.vote, name='vote'),
208
-
209
- ]
210
-
211
-
212
-
213
- ```
214
-
215
-
216
-
217
-
218
-
219
- ```
220
-
221
- path('<int:pk>/', views.DetailView.as_view(), name='detail'),
222
-
223
- ```
224
-
225
-
226
-
227
-
228
-
229
- です。なにか少しずつずれがあり表示されていないのだと思うのですが・・・。
230
-
231
- よろしくお願いいたします!
189
+ fields = ('text_area',)
190
+
191
+
192
+
193
+ ```
194
+
195
+
196
+
197
+ なおdjangoチュートリアルの投票機能を基コメント部分改造していす。
198
+
199
+ [https://docs.djangoproject.com/ja/2.1/intro/tutorial01/](https://docs.djangoproject.com/ja/2.1/intro/tutorial01/)
200
+
201
+
202
+
203
+ [https://github.com/sr2460/polls](https://github.com/sr2460/polls)
204
+
205
+
206
+
207
+ ディレクトリ構成はこのようになっております。
208
+
209
+ ![イメージ説明](745f16e5a6686a70ebeaab58b2e9d3f7.png)
210
+
211
+
212
+
213
+
214
+
215
+ classの継承以外にも何か方法があればその方法でも構いません。
216
+
217
+ 現在エラーメッセージも出ませんし、フォームが動作するかチェックしようにもフォーム自体が表示されませんので困り果てております。
218
+
219
+ まずフォームをきちんとこのページに表示させたいです。
220
+
221
+ どうかアドバイスよろしくお願いいたします。