質問編集履歴

4

2017/09/15 13:45

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes

3

補足の追記

2017/09/15 13:45

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -170,6 +170,56 @@
170
170
 
171
171
  forms.pyのclean_passwordが上手く動作していないようですが、DBに保存された既存のpasswordといかに照合すればよいでしょうか。
172
172
 
173
-
174
-
175
173
  改めてご教示のほど宜しくお願い致します。
174
+
175
+
176
+
177
+ ###補足
178
+
179
+ ちなみにですがforms.pyを
180
+
181
+ ```
182
+
183
+ #forms.py
184
+
185
+
186
+
187
+ class PraForm(forms.ModelForm):
188
+
189
+ class Meta:
190
+
191
+ model = practice
192
+
193
+ fields = ('text1','password')
194
+
195
+
196
+
197
+ def __init__(self, *args, **kwargs):
198
+
199
+ practice_id = kwargs.pop('practice_id')
200
+
201
+ super(PraForm, self).__init__(*args, **kwargs)
202
+
203
+
204
+
205
+ def clean_password(self):
206
+
207
+ password = self.cleaned_data['password']
208
+
209
+ aaa = practice.objects.get(id = practice_id)
210
+
211
+ if password != aaa.password:
212
+
213
+ raise forms.ValidationError('パスワードが違います')
214
+
215
+ return password
216
+
217
+ ```
218
+
219
+ のように書くと
220
+
221
+ ERROR:name 'practice_id' is not defined
222
+
223
+ のように出てしまいますが、このエラーの解決が答えにつながる気もしております。
224
+
225
+ 上の方で書いたforms.pyはnot definedが出ていたので__init__の中に入れてみたという挑戦の軌跡となっております。

2

コード更新

2017/09/15 11:54

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -40,25 +40,31 @@
40
40
 
41
41
 
42
42
 
43
- def clean_password(self):
43
+ def __init__(self, *args, **kwargs):
44
44
 
45
- password = self.cleaned_data['password']
45
+ practice_id = kwargs.pop('practice_id')
46
46
 
47
- aaa = practice.objects.get(id = id)
47
+ super(PraForm, self).__init__(*args, **kwargs)
48
48
 
49
- bbb = aaa.password
50
49
 
51
- if password != bbb:
52
50
 
53
- raise forms.ValidationError('パスワードが違います')
51
+ def clean_password(self):
54
52
 
53
+ password = self.cleaned_data['password']
54
+
55
+ aaa = practice.objects.get(id = practice_id)
56
+
57
+ if password != aaa.password:
58
+
59
+ raise forms.ValidationError('パスワードが違います')
60
+
55
- return password
61
+ return password
56
62
 
57
63
  ```
58
64
 
59
65
  ここの仕組み作りは下記点において苦しんでおります。。。
60
66
 
61
- ・CBV→modelformへのID(pk)の渡し方
67
+ ・CBV→modelformへのID(pk)の渡し方 ※解決しました。
62
68
 
63
69
  ・idに紐づいたパスワードとの照合方法
64
70
 
@@ -74,6 +80,12 @@
74
80
 
75
81
 
76
82
 
83
+ def top(request):
84
+
85
+ return render(request, 'top.html')
86
+
87
+
88
+
77
89
  class DataView(FormMixin, generic.DetailView):
78
90
 
79
91
  model = practice
@@ -84,11 +96,13 @@
84
96
 
85
97
 
86
98
 
87
- def form_valid(self, form):
99
+ def get_form_kwargs(self):
88
100
 
89
- practice_pk = self.kwargs['pk']
101
+ kwargs = super(DataView, self).get_form_kwargs()
90
102
 
91
- return redirect('pra1:dataview', pk=practice_pk)
103
+ kwargs['practice_id'] = self.kwargs['pk']
104
+
105
+ return kwargs
92
106
 
93
107
 
94
108
 
@@ -104,6 +118,20 @@
104
118
 
105
119
  return self.form_invalid(form)
106
120
 
121
+
122
+
123
+ def form_valid(self, form):
124
+
125
+ practice_pk = self.kwargs['pk']
126
+
127
+ return redirect('pra1:dataview', pk=practice_pk)
128
+
129
+
130
+
131
+ def form_invalid(self, form):
132
+
133
+ return redirect('pra1:top')
134
+
107
135
  ```
108
136
 
109
137
  先ほどのformの照合で、form_validになればリダイレクト先の編集ページに飛ばそうと思っております。(このコードは自身へのリダイレクトになっております。)
@@ -114,215 +142,11 @@
114
142
 
115
143
  ###発生している問題・エラーメッセージ
116
144
 
117
- こちらのコードが一番イメージに近いのかなと思っておりますが、
118
-
119
- 下記のエラーが出力されます。
145
+ ※このエラーは解決したので削除します。
120
-
121
-
122
-
123
- ```
124
-
125
- int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'
126
-
127
-
128
-
129
- Environment:
130
146
 
131
147
 
132
148
 
133
149
 
134
-
135
- Request Method: POST
136
-
137
- Request URL: http://127.0.0.1:8000/pra1/dataview/1/
138
-
139
-
140
-
141
- Django Version: 1.11.5
142
-
143
- Python Version: 3.6.0
144
-
145
- Installed Applications:
146
-
147
- ['django.contrib.admin',
148
-
149
- 'django.contrib.auth',
150
-
151
- 'django.contrib.contenttypes',
152
-
153
- 'django.contrib.sessions',
154
-
155
- 'django.contrib.messages',
156
-
157
- 'django.contrib.staticfiles',
158
-
159
- 'pra1',
160
-
161
- 'pra2']
162
-
163
- Installed Middleware:
164
-
165
- ['django.middleware.security.SecurityMiddleware',
166
-
167
- 'django.contrib.sessions.middleware.SessionMiddleware',
168
-
169
- 'django.middleware.common.CommonMiddleware',
170
-
171
- 'django.middleware.csrf.CsrfViewMiddleware',
172
-
173
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
174
-
175
- 'django.contrib.messages.middleware.MessageMiddleware',
176
-
177
- 'django.middleware.clickjacking.XFrameOptionsMiddleware']
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
- Traceback:
186
-
187
-
188
-
189
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\core\handlers\exception.py" in inner
190
-
191
- 41. response = get_response(request)
192
-
193
-
194
-
195
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\core\handlers\base.py" in _get_response
196
-
197
- 187. response = self.process_exception_by_middleware(e, request)
198
-
199
-
200
-
201
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\core\handlers\base.py" in _get_response
202
-
203
- 185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
204
-
205
-
206
-
207
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\views\generic\base.py" in view
208
-
209
- 68. return self.dispatch(request, *args, **kwargs)
210
-
211
-
212
-
213
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\views\generic\base.py" in dispatch
214
-
215
- 88. return handler(request, *args, **kwargs)
216
-
217
-
218
-
219
- File "C:\Users\User\pra\pra\pra\mysite\pra1\views.py" in post
220
-
221
- 26. if form.is_valid():
222
-
223
-
224
-
225
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\forms\forms.py" in is_valid
226
-
227
- 183. return self.is_bound and not self.errors
228
-
229
-
230
-
231
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\forms\forms.py" in errors
232
-
233
- 175. self.full_clean()
234
-
235
-
236
-
237
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\forms\forms.py" in full_clean
238
-
239
- 384. self._clean_fields()
240
-
241
-
242
-
243
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\forms\forms.py" in _clean_fields
244
-
245
- 405. value = getattr(self, 'clean_%s' % name)()
246
-
247
-
248
-
249
- File "C:\Users\User\pra\pra\pra\mysite\pra1\forms.py" in clean_password
250
-
251
- 12. aaa = practice.objects.get(id = id)
252
-
253
-
254
-
255
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\manager.py" in manager_method
256
-
257
- 85. return getattr(self.get_queryset(), name)(*args, **kwargs)
258
-
259
-
260
-
261
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\query.py" in get
262
-
263
- 371. clone = self.filter(*args, **kwargs)
264
-
265
-
266
-
267
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\query.py" in filter
268
-
269
- 784. return self._filter_or_exclude(False, *args, **kwargs)
270
-
271
-
272
-
273
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
274
-
275
- 802. clone.query.add_q(Q(*args, **kwargs))
276
-
277
-
278
-
279
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\sql\query.py" in add_q
280
-
281
- 1250. clause, _ = self._add_q(q_object, self.used_aliases)
282
-
283
-
284
-
285
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\sql\query.py" in _add_q
286
-
287
- 1276. allow_joins=allow_joins, split_subq=split_subq,
288
-
289
-
290
-
291
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\sql\query.py" in build_filter
292
-
293
- 1210. condition = self.build_lookup(lookups, col, value)
294
-
295
-
296
-
297
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\sql\query.py" in build_lookup
298
-
299
- 1104. return final_lookup(lhs, rhs)
300
-
301
-
302
-
303
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\lookups.py" in __init__
304
-
305
- 24. self.rhs = self.get_prep_lookup()
306
-
307
-
308
-
309
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\lookups.py" in get_prep_lookup
310
-
311
- 74. return self.lhs.output_field.get_prep_value(self.rhs)
312
-
313
-
314
-
315
- File "C:\Users\User\pra\pra\pra\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
316
-
317
- 966. return int(value)
318
-
319
-
320
-
321
- Exception Type: TypeError at /pra1/dataview/1/
322
-
323
- Exception Value: int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'
324
-
325
- ```
326
150
 
327
151
  恐らくforms.pyのid = idの部分が問題なのだろうと思います。
328
152
 
@@ -333,3 +157,19 @@
333
157
  そしてその先のvalidationに関してもコードのご教示を頂ければ幸いです。
334
158
 
335
159
  宜しくお願い致します。
160
+
161
+
162
+
163
+ ###追記
164
+
165
+ パラメーターのpassにはどうやら成功したようです。
166
+
167
+ 上記のコードを編集し直しました。
168
+
169
+ しかしリダイレクト先は、form_invalidの方になってしまいます。
170
+
171
+ forms.pyのclean_passwordが上手く動作していないようですが、DBに保存された既存のpasswordといかに照合すればよいでしょうか。
172
+
173
+
174
+
175
+ 改めてご教示のほど宜しくお願い致します。

1

2017/09/15 11:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -332,4 +332,4 @@
332
332
 
333
333
  そしてその先のvalidationに関してもコードのご教示を頂ければ幸いです。
334
334
 
335
- よろしくお願いいたします。
335
+ しくお願いします。