18

Django >= 1.5 で User モデルを参照する最良の方法は何ですか?

ユーザー モデルの参照を読んだ後、しばらくの間 (1) を使い始めました。

(1)

from django.conf import settings
from django.db import models

class Article(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)

しかし、Zen of Python に従って、読みやすさは重要です。

(2)

from django.contrib.auth import get_user_model
from django.db import models

User = get_user_model()

class Article(models.Model):
    author = models.ForeignKey(User)
4

4 に答える 4

12

更新: Django 1.11 の時点でget_user_model 、モデルを定義するモジュールであっても、インポート時に呼び出すことができるようになりました。

つまり、次のことができます。 models.ForeignKey(get_user_model(), ...)


元の回答 (Django <= 1.11)

モジュール レベルで使用すると、循環参照の問題が発生する可能性があります。get_user_model認証ユーザー モデルをインポートする別のオプションは次のとおりです。

from django.conf import settings

AUTH_USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')

# models
class Article(models.Model):
    author = models.ForeignKey(AUTH_USER_MODEL)

は、設定ファイルで が検出されない場合、Django のデフォルトのgetattrユーザー モデルを返します。auth.UserAUTH_USER_MODEL

于 2014-02-07T01:53:53.373 に答える
3

ユーザー モデルを拡張するだけである (またはまったく触れない) 限り、次のことを行うことができます。

from django.contrib.auth.models import User

author = models.ForeignKey(User)  
于 2013-09-24T22:22:11.690 に答える
2

「可読性が重要」は2番目のケースではないと思います。

author = models.ForeignKey(User)

のように見える

from django.contrib.auth.models import User

... # Imagine tons of code here    

class Article(models.Model):
    author = models.ForeignKey(User)

私のため。うまくいかないときは驚くでしょう

article.author.get_full_name() # or any auth.models.User specific method
于 2013-09-25T15:54:46.640 に答える
1

私の意見では、2番目のものです。2 番目の方法では、すべてを同じファイルに入れることができ、2 つの異なるファイルを変更する必要はありません。これにより、問題が発生する可能性があります。

于 2013-09-24T22:10:25.743 に答える