如何将 Django 的身份验证用户模型配置为具有 UUID(Postgres DB)

Posted

技术标签:

【中文标题】如何将 Django 的身份验证用户模型配置为具有 UUID(Postgres DB)【英文标题】:How do I configure Django's auth user model to have a UUID (Postgres DB) 【发布时间】:2021-12-11 10:43:04 【问题描述】:

我正在使用 Python 3.9 和 Django 3.2。这是我的文件夹结构

+ cbapp
    - settings.py
    + models
        - __init__.py
        - custom_user.py
- manage.py

这是我的 customer_user.py 文件的样子

$ cat models/custom_user.py
import uuid

from django.contrib.auth.models import AbstractUser
from django.db import models


class CustomUser(AbstractUser):
    pass
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

另外,我已经在我的 settings.py 文件中配置了这个

AUTH_USER_MODEL = 'models.CustomUser'

但是,当我运行“python manage.py makemigrations”时,我得到了这个错误

django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'models.CustomUser' that has not been installed

我不知道这意味着什么。我的 settings.py 文件中有这个

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cbapp',
]
...
AUTH_USER_MODEL = 'models.CustomUser'

【问题讨论】:

看起来你的模块包含在 Django 启动期间未初始化的模型。 【参考方案1】:

根据Django doc,替换自定义用户模型

    您创建了自定义用户模型(您已经这样做了)

    settings.py 中,将 AUTH_USER_MODEL 指向它(您在上面创建的模型),如下所示:

     AUTH_USER_MODEL = 'myapp.MyUser'
    

    你的错误在这里:而不是AUTH_USER_MODEL = 'models.CustomUser'AUTH_USER_MODEL = 'cbapp.CustomUser'

注意:不要指向你的模型文件,而是你的app_name,然后是model_name

【讨论】:

以上是关于如何将 Django 的身份验证用户模型配置为具有 UUID(Postgres DB)的主要内容,如果未能解决你的问题,请参考以下文章

如何将媒体文件的 URL 限制为 Django 中未经身份验证的用户?

如何查看数据库中是不是有其他用户具有相同的用户名 - JWT Django REST 身份验证

Django 1.5:UserCreationForm 和自定义身份验证模型

没有用户模型的 Django 基于令牌的身份验证

如何正确扩展 django 用户模型

Django 重写用户模型