質問するログイン新規登録

回答編集履歴

1

form情報をQueryDict → Dict →jsonにしてsessionに格納しsession→dict→QueryDictに戻してformに設定する。

2021/06/30 05:28

投稿

bolle
bolle

スコア1

answer CHANGED
@@ -1,29 +1,33 @@
1
1
  ```Python/Django
2
2
 
3
- from .forms import HogeForm
4
- from django.shortcuts import redirect
3
+ # formをQueryDict→Dict→jsonにしてsessionに格納
5
-
4
+
6
- def HogeCreateView(request):
5
+ form_QueryDict = self.request.GET
7
- # 一覧表示からの遷移や、確認画面から戻った時
6
+ form_Dict = dict(form_QueryDict)
7
+ form_json = json.dumps(form_Dict)
8
- if request.method == 'GET':
8
+ self.request.session['form_data'] = form_json
9
+
10
+
11
+ ===================================================================================
12
+
9
- # セッションにデータがあればそれ使う
13
+ # sessionよりform情報のjson取得してDict→QueryDictに変換してformに戻す。
10
- form = HogeForm(request.session.get('form_data'))
14
+ form_data = request.session.get('form_data')
15
+ if form_data is None:
11
- # 送信ボタンが押された時(POSTされた時)
16
+ form = forms.FilterForm()
12
17
  else:
18
+ form_data_json = json.loads(form_data)
19
+ qdict = QueryDict('', mutable=True)
20
+ for key, value in form_data_json.items():
13
- # POST
21
+ d = {key: value}
22
+ qdict.update(MultiValueDict(d) if isinstance(value, list) else d)
14
- form = HogeForm(request.POST)
23
+ form = forms.FilterForm(qdict)
15
- # 送信された値が正しかった時の処理
16
- if form.is_valid():
17
- # 保存
18
- form.save()
24
+ return render(
19
- # セッションにデータを格納
20
- request.session['form_data'] = request.POST
21
- # 遷移させるページ
25
+ request,
22
- return redirect('hoge:top')
26
+ 'search.html',
23
- # コンテキストにフォームのオブジェクトを指定してレンダリング
24
- context = {
27
+ {
25
- 'form': form,
28
+ 'form': form,
29
+ 'is_admin': is_admin
26
- }
30
+ }
27
- return render(request, 'hoge_form.html', context)
31
+ )
28
32
 
29
33
  ```