我正在Django 1.5项目上工作,并且有一个自定义用户模型(我们将其称为CustomUser)。另一个应用程序(SomeApp)需要引用此自定义用户模型。出于ForeignKey之类的目的,Django文档说要使用

User = settings.AUTH_USER_MODEL

但是,SomeApp.models中的某些功能需要访问以前称为User.objects的内容。但是User现在是一个字符串而不是一个类,因此User.objects失败。替代方案是
from django.contrib.auth import get_user_model
User = get_user_model()

可以在其他模块中使用,但是当我在SomeApp的models.py中使用它时,Django会引发错误:



有任何想法吗?

编辑1-追溯:
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "...\django-badger\badger\__init__.py", line 7, in <module>
    from badger.models import Badge, Award, Progress
  File "...\django-badger\badger\models.py", line 26, in <module>
    User = get_user_model()
  File "...\lib\site-packages\django\contrib\auth\__init__.py", line 127, in get_user_model
    raise ImproperlyConfigured("AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL)
ImproperlyConfigured: AUTH_USER_MODEL refers to model 'MyApp.AuthUser' that has not been installed

编辑2-INSTALLED_APPS设置:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'south',
'MyApp',   # this is where my user model is defined
'SomeApp', # I try to use get_user_model() in this app's models.py; doesn't work.
'social_auth',
)

最佳答案

我认为这很简单。我在递归包含中有很多问题,等等。
好吧,当您添加ForeignKey时,最简单的事情是像这样编写它:

user = models.ForeignKey(settings.AUTH_USER_MODEL, null=False, on_delete=models.CASCADE, verbose_name=_(u"User"))

如果您使用get_user_model,请不要像使用它那样使用它。呼唤
User = get_user_model()

在模块顶部,将尝试导入您的User模型,该模型实际上可能尚未“安装”。
相反,您有几种选择:
  • 在模块顶部,编写

    User = get_user_model#然后,您将必须使用User()而不是User
  • 在所有有用的地方都写get_user_model()。总是在方法或函数中,决不能直接在模型模块主体中。
  • 关于django - Django 1.5 : Accessing custom user model fields in models. py,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17469682/

    10-12 22:01
    查看更多