自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

【Django】views.pyでユーザーモデルを扱う時は get_user_model を使う

thumbnail

これまで、ユーザーモデルをimportする時

from django.contrib.auth.models import User

もしくは、カスタムユーザーモデルの場合

from users.models import CustomUser

などとしてきたが、これでは通常のユーザーモデルから、カスタムユーザーモデル導入時にimport文をすべて書き換える必要が出てくる。

アプリが複数であれば、それをすべて書き換えていくのはとても面倒。

そこで、get_user_model を使う。これにより、カスタムユーザーモデルの転換時のコード編集の手間を減らすことができる。

理屈

この get_user_model は settings.pyのAUTH_USER_MODELで指定したモデルを呼び出している。

AUTH_USER_MODELはデフォルトでは django.contrib.auth.models.Userを、カスタムユーザーモデル実装時にはその指定したカスタムユーザーモデルを指している。

つまり、get_user_modelを使うことで、プロジェクトで使用しているユーザーモデルを柔軟に呼び出すことができるということだ。

get_user_model を使う

django.contrib.auth の中に含まれているので、importして使う。

from django.contrib.auth import get_user_model

User = get_user_model()

以降はこのUserがユーザーモデルを指すようになる。

user = User.objects.filter(id=1).first()

このように通常のモデルと同じように扱うことができる。

用途と影響する範囲

views.py

例えば、プロジェクト内にユーザーの個別ページを表示させる場合、Userモデルをimportしているのではないだろうか?

views.pyでget_user_model()を使うとよいだろう。

models.py

ユーザーモデルとの1対多を作っている場合。

こちらもget_user_modelを使うことで、カスタムユーザーモデルに転換した後の編集がなくなる。

その他、常駐スクリプトなど

【Django】manage.pyコマンドを追加させる【バッチ処理、常駐プログラムなどに】』で作った常駐スクリプト・常駐プログラム。

Userモデルをimportして、問題ありなユーザーを調べている場合、こちらもget_user_model()で置き換えることができるだろう。

結論

最初からカスタムユーザーモデルを実装する場合、あえて今回のget_user_modelを実装しなくてもいい。

もしこれからプロジェクトを作っていくときには、get_user_model を使っておいたほうが後々柔軟に対応できるだろう。

スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ