ask*_*tor 6 django django-models django-users django-1.5
我正在研究Django 1.5项目,我有一个自定义用户模型(让我们称之为CustomUser).另一个应用程序(SomeApp)需要引用此自定义用户模型.出于ForeignKey之类的目的,Django文档说要使用
User = settings.AUTH_USER_MODEL
Run Code Online (Sandbox Code Playgroud)
但是,SomeApp.models中的某些函数需要访问以前所知的内容User.objects.但是User现在是一个字符串而不是一个类,所以User.objects失败了.替代方案是
from django.contrib.auth import get_user_model
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)
哪个适用于其他模块,但是当我在SomeApp的models.py中使用它时,Django引发了一个错误:
配置不正确("AUTH_USER_MODEL指的是尚未安装的型号'%s'"%settings.AUTH_USER_MODEL)
有任何想法吗?
编辑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
Run Code Online (Sandbox Code Playgroud)
编辑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',
)
Run Code Online (Sandbox Code Playgroud)
Ste*_*e K 10
我认为很简单.我有很多关于递归包含的问题等等......好吧,最简单的事情是,当你添加一个时ForeignKey,就是这样写:
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=False, on_delete=models.CASCADE, verbose_name=_(u"User"))
Run Code Online (Sandbox Code Playgroud)
如果您使用get_user_model,请不要像使用它一样使用它.调用
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)
在模块的顶部将尝试导入您的User模型,这可能确实没有"安装".相反,你有几个选择:
在模块的顶部,写
User = get_user_model#然后,您将不得不使用User()而不是User
写get_user_model()到处都有用.始终在方法或功能中,永远不要直接在模型模块体中.
小智 9
我刚才遇到了同样的问题,这是我的2美分/解决方案.
如果你想在models.py中使用自定义用户模型,你将用于外键settings.AUTH_USER_MODEL和你必须使用的模型方法,get_user_model()但它必须在方法内部.由于循环导入,它不会在外面工作.
from django.conf import settings
from django.contrib.auth import get_user_model
class Event(models.Model):
recipient = models.ForeignKey(settings.AUTH_USER_MODEL)
...
def get_something(self):
User = get_user_model()
u = User.objects.get(id=...)
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8793 次 |
| 最近记录: |