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

Django: issues migrating to custom user model

我一直在编写一个 Django webapp,而不太关心我的用户模型——提供的模型很好,但我意识到我希望能够以某种方式自定义它。

从头开始使用自定义用户模型看起来非常简单,但是在保留现有用户的同时迁移到一个模型有点棘手,并且给我带来了很多问题。我发现 this guide 使用了一个特殊的包,并针对我的具体情况提供了分步说明(Django 1.8,Python 3.4)。

其中一个准备步骤是

您必须确保在项目的任何地方(包括第 3 方库)都使用 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

作为中间步骤,在 settings.py 的顶部导入 django.contrib.auth.models.User

我尝试切换我的模型以使用设置:

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 设置不为空,所以我认为设置中存在其他错误。

有点不清楚您现在从默认用户切换到自定义用户的位置,但正如文档所说 here,您的 AUTH_USER_MODEL 应该设置为:

AUTH_USER_MODEL = 'auth.User'

作为字符串,不直接导入模型。 'auth.User' 是默认设置,所以如果你想在你的代码中使用默认用户,只需像这样设置它,当你准备好切换它时,将它更改为任何应用程序名称和模型,因此:'my_app.CustomUser'

你收到 SECRET_KEY 错误是因为你试图在 settings.py 的顶部导入 django.contrib.auth.models.User,所以它之前导入了 django 库的其他部分设置文件,但应该首先加载设置文件。