Django:迁移到自定义用户模型的问题

时间:2016-02-19 11:54:44

标签: django django-models django-custom-user

我一直在编写一个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设置不为空,因此我认为设置中存在不同的错误。

1 个答案:

答案 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库的其他部分设置文件,但应首先加载设置文件。