Django ビュークラスでsetupメソッドが原因の例外が発生した時の対処法

クラスベースビューを利用していると以下の様な例外が発生する事があります。

<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)
    # 後続処理

スポンサーリンク
スポンサーリンク