1. ホーム
  2. python

[解決済み] get_user_model と settings.AUTH_USER_MODEL を使った Django の違い

2022-07-29 03:27:35

質問

Django ドキュメントを読んでいます。

get_user_model()

User を直接参照する代わりに、 django.contrib.auth.get_user_model() を使ってユーザーモデルを参照する必要があります。 モデルを参照する必要があります。このメソッドは このメソッドは現在アクティブな User モデルを返します - もしカスタム User モデルが指定されていればそのモデル、そうでなければ User を返します。 が指定されていればカスタム User モデル、そうでなければ User を返します。

Userモデルに対して外部キーまたは多対多のリレーションを定義する場合、AUTH_USER_MODELを使用してカスタムモデルを指定する必要があります。 モデルへの外部キーまたは多対多のリレーションを定義する場合、AUTH_USER_MODEL設定を使ってカスタムモデルを指定する必要があります。 設定を使用します。

上記の文章で混乱しています。こうすればいいのでしょうか。

author = models.ForeignKey(settings.AUTH_USER_MODEL)

またはこれ...

author = models.ForeignKey(get_user_model())

どちらも動作しているようです。

どのように解決するのですか?

使用方法 settings.AUTH_USER_MODEL を使うと、すべてのアプリがロードされるまで、実際のモデルクラスの取得を遅らせます。 get_user_model は、アプリが初めてインポートされた時点でモデルクラスの取得を試みます。

get_user_modelUser モデルがすでにアプリキャッシュにロードされていることを保証することはできません。あなたの特定の設定ではうまくいくかもしれませんが、それはヒットアンドミスのシナリオです。いくつかの設定を変更した場合(たとえば INSTALLED_APPS の順序など) を変更すると、インポートがうまくいかず、デバッグにさらに時間がかかる可能性があります。

settings.AUTH_USER_MODEL は外部キーモデルとして文字列を渡し、この外部キーがインポートされた時点でモデルクラスの検索に失敗した場合、すべてのモデルクラスがキャッシュにロードされるまで検索が遅延されます。