お疲れ様です。下記の質問です。
前提・実現したいこと
現在DjangoフレームワークでWebアプリケーションを作成しています。
その中の仕様の1つに、Formで入力した内容を保存しつつ、一部のForm内容は保存せずリダイレクト先に表示するというものがあります。
登録のViewなのでCreateViewを使い、form_valid()あたりをいじってやればできるだろと考えて下記のようにコードを作成しました。
def form_valid(self, form): self.object = form.save() return "".join([reverse('LeaseMgg:saved_rm_result', kwargs={'pk': 1}), '?', urlencode(dict(form_contents_1='10', form_contents_2='1'))])
urlencodeについて参考にしたページはこちらです。
django.urls.reverse についてまとめる - Qiita
また、form_valid()
の内容はDjangoのコードを読んで修正しています。
django.edit.py - GitHub
発生している問題・エラーメッセージ
すると、下記のエラーが出ました。
Traceback (most recent call last): File "/Users/moritahiroki/PycharmProjects/hlp/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/Users/moritahiroki/PycharmProjects/hlp/venv/lib/python3.6/site-packages/django/utils/deprecation.py", line 96, in __call__ response = self.process_response(request, response) File "/Users/moritahiroki/PycharmProjects/hlp/venv/lib/python3.6/site-packages/django/middleware/clickjacking.py", line 26, in process_response if response.get('X-Frame-Options') is not None: Exception Type: AttributeError at /save-rm/ Exception Value: 'str' object has no attribute 'get'
なぜかは分からないのですが、responseの内容がstr型になっており、そのためにエラーになっているようです。それもミドルウェアで。。
試したこと
form_valid()
で返している文字列が悪いのかと思い、単純なreverse文を書いてみたのですが、結果は同じでした。
return reverse('LeaseMgg:saved_rm_result', kwargs={'pk': 1})
form_valid()
をいじってるだけなのでそんなに変なことをしているとは思わないのですが、このミドルウェア関連のところとなると若干どう手をつけていいものか悩んでいます。もし原因に心当たりがあればご教授願いたいです。
もしくは、そもそもこういうやり方ではない方法でformの値をリダイレクト先に渡せるのであれば、その方法を教えていただきたいです。
以上、よろしくお願いします。。
補足情報(FW/ツールのバージョンなど)
Django 3.0
Python 3.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。