質問編集履歴

1

修正

2018/07/25 04:54

投稿

tarryscoffee
tarryscoffee

スコア13

test CHANGED
File without changes
test CHANGED
@@ -179,3 +179,151 @@
179
179
 
180
180
 
181
181
  それでは宜しくお願い致します。
182
+
183
+
184
+
185
+ #### 修正後のソースコード(インラインフォームセット利用)
186
+
187
+
188
+
189
+ いただいた提案に加え、下記チュートリアルを参考に作成してみましたが、
190
+
191
+ 今度は、DBに情報が追加されない症状が発生しました。
192
+
193
+ エラーなどは特に出力しておらず、デバックをしてみましたが、
194
+
195
+ まずform_valid()が実行されていないことがわかりました。
196
+
197
+
198
+
199
+ ただ、どうしてform_valid()が実行されないかがわからず、
200
+
201
+ 再度行き詰ってしまいました。。
202
+
203
+
204
+
205
+ [Django、インラインフォームセットを使う](https://torina.top/detail/432/)
206
+
207
+
208
+
209
+
210
+
211
+ ```python
212
+
213
+ #forms.py
214
+
215
+
216
+
217
+ from django.contrib.auth import get_user_model
218
+
219
+ from django.forms import ModelForm, inlineformset_factory
220
+
221
+
222
+
223
+ from personal.models import PersonalInfo
224
+
225
+
226
+
227
+
228
+
229
+ PersonalInfoFormSet = inlineformset_factory(
230
+
231
+ parent_model = get_user_model(),
232
+
233
+ model = PersonalInfo,
234
+
235
+ fields = ['height', 'weight'],
236
+
237
+ extra = 1,
238
+
239
+ can_delete = False
240
+
241
+ )
242
+
243
+
244
+
245
+ ```
246
+
247
+
248
+
249
+ ```python
250
+
251
+ # views.py
252
+
253
+
254
+
255
+ from django.contrib.auth import get_user_model
256
+
257
+ from django.forms import inlineformset_factory
258
+
259
+ from django.http import HttpResponseRedirect
260
+
261
+ from django.shortcuts import render
262
+
263
+ from django.urls import reverse_lazy
264
+
265
+ from django.views.generic import CreateView
266
+
267
+
268
+
269
+ from personal.forms import PersonalInfoFormSet
270
+
271
+ from personal.models import PersonalInfo
272
+
273
+
274
+
275
+ User = get_user_model()
276
+
277
+
278
+
279
+
280
+
281
+ class PersonalEdit(CreateView):
282
+
283
+ model = User
284
+
285
+ fields = '__all__'
286
+
287
+ template_name = 'personal/personal_edit.html'
288
+
289
+ success_url = reverse_lazy('accounts:dashboard')
290
+
291
+
292
+
293
+ def form_valid(self, form):
294
+
295
+ self.object = form.save(commit = False)
296
+
297
+
298
+
299
+ formset = PersonalInfoFormSet(self.request.POST, instance = self.object)
300
+
301
+
302
+
303
+ if formset.is_valid():
304
+
305
+ self.object.save()
306
+
307
+ formset.save()
308
+
309
+ return HttpResponseRedirect(self.get_success_url())
310
+
311
+
312
+
313
+ else:
314
+
315
+ return self.render_to_response(self.get_context_data(form = form, formset = formset))
316
+
317
+
318
+
319
+ def get_context_data(self, **kwargs):
320
+
321
+ if 'formset' not in kwargs:
322
+
323
+ kwargs['formset'] = PersonalInfoFormSet(self.request.POST or None)
324
+
325
+ return super().get_context_data(**kwargs)
326
+
327
+
328
+
329
+ ```