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 库的其他部分设置文件,但应该首先加载设置文件。
我一直在编写一个 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 库的其他部分设置文件,但应该首先加载设置文件。