クラスベースビューを利用していると以下の様な例外が発生する事があります。
<classname> instance has no 'request' attribute. Did you override setup() and forget to call super()?
※<classname>には例外が発生したクラス名が入ります。
このような例外の発生原因と対処法を紹介します。
問題点
例外を翻訳すると、
「<クラス名>のインスタンスに ‘request’属性がありません。setup()をオーバーライドして、super()を呼び忘れていませんか?」
となります。クラスベースビューの元となるViewクラスでsetupメソッドが定義されているため、自作のsetupメソッドを作成するとこの様な例外が発生しやすいです。
対処法
以下の2つが考えられます。1つ目の対処法が簡単です。
・メソッド名をsetup以外に変更する。
・superメソッドを実行する。(setupメソッドを正しくオーバーライドする)
superメソッドを実行する場合以下の様なコードになるでしょう。
def setup(self, request, *args, **kwargs):
super().setup(request, *args, **kwargs)
# 後続処理
コメントを残す