我正在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/