ダーシャのブログ

ゆるゆる生きてていいじゃない

djangoのviews.pyでデータベース参照すると(関数名) missing 1 required positional argument: 'self'が出る

f:id:darshasilje:20210315034434p:plain

models.pyの関数を使った

djangoアプリ開発をしているとき、models.pyに特定のデータベースにある文字列を返す関数を作った。それをviews.pyで参照してサイトに出力しようとした結果、まさかの上記のエラーがでた。

調べたところ、けっこう忘れがちなミスだったので記事に残す。

クラスを呼び出す際はインスタンス化しなければならない

models.pyにあるUserクラスのget_name()をviews.pyで使う時に通常であれば、

from .models import User
mainUser = User();
print(mainUser.get_name())

となる。これはしっかりインスタンス化されているので問題なかった。

しかし、objects.filter()等で呼び出す際に簡潔にまとめようとして、

objects.filter(name=User.get_name())

としたらエラーとなった。

昔やった授業を思い出した

考えてみれば当たり前であるが、エラーが出た時はまったく気が付かなかった。 高専一年生の時にやった授業を思い出した。クラスとインスタンスを理解していなかったが、少しは理解できたと思う。