質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

695閲覧

DjangoのCreateViewを継承したクラスでクリックジャッキング関連のエラーに引っかかる

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/02 03:56

お疲れ様です。下記の質問です。

前提・実現したいこと

現在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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

def form_valid(self, form): self.object = form.save() return HttpResponseRedirect("".join([reverse('LeaseMgg:saved_rm_result', kwargs={'pk': 1}), '?', urlencode(dict(form_contents_1='10', form_contents_2='1'))]))

これでした。レスポンス返せばいいってだけです、エラー文が全てでしたね。。

投稿2020/03/02 04:21

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問