我一直在编写一个Django webapp而不太关心我的用户模型 - 提供的模型很好,但我已经意识到我希望能够以某种方式自定义它。
从头开始使用自定义用户模型看起来非常简单,但在保留现有用户的同时迁移到一个有点棘手,并且给了我很多问题。我发现this guide使用了一个特殊的包,并按照我的确切情况逐步说明(Django 1.8,Python 3.4)。
其中一个准备步骤是
您必须确保项目中的所有位置(包括第三方库)都使用AUTH_USER_MODEL和django.contrib.auth.get_user_model()而不是" auth.User"和django.contrib.auth.models.User。
我的项目并不复杂 - 对于User模型的唯一引用是在ForeignKeys以及一些获取User对象的行中。
我应该在哪里使用django.contrib.auth.get_user_model()?我的印象是ForeignKeys需要使用settings.AUTH_USER_MODEL和任何运行时操作(例如obj = User.objects.get(<criteria>)
将User
设置为get_user_model()
。这是正确的吗?
我目前的AUTH_USER_MODEL设置如下:
AUTH_USER_MODEL = User
作为中间步骤,在django.contrib.auth.models.User
的顶部导入settings.py
。
我尝试切换模型以使用设置:
class League(models.Model):
name = models.CharField(max_length=100)
users = models.ManyToManyField(settings.AUTH_USER_MODEL)
但是,当我启动服务器时,我一直收到有关settings.py
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
我在这里做错了什么? SECRET_KEY设置不为空,因此我认为设置中存在不同的错误。
答案 0 :(得分:3)
在从默认用户切换到自定义用户时,您现在处于何种状态有点不清楚,但就像文档说here一样,您的AUTH_USER_MODEL
应设置为:
AUTH_USER_MODEL = 'auth.User'
作为字符串,不直接导入模型。 'auth.User'
是默认设置,因此如果您想在代码中使用默认用户,请将其设置为相似,当您准备将其切换时,请将其更改为任何应用名称和型号,以便:{{ 1}}
您收到'my_app.CustomUser'
错误,因为您尝试在settings.py。的顶部导入django.contrib.auth.models.User,因此它之前导入了django库的其他部分设置文件,但应首先加载设置文件。