You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何为django.contrib.auth模型及全项目迁移应用UUID主键

实现Django contrib auth全模型UUID主键配置步骤

前置准备

  • 提前备份全量数据库和现有迁移文件,避免操作失误导致数据丢失
  • 若为已上线项目,先在测试环境验证整套流程无问题再操作生产环境
  • 需使用Django 3.2及以上版本,低于该版本建议先升级Django核心依赖

步骤1:创建自定义auth应用替换默认实现

你无法直接修改django.contrib.auth的源码,需新建自定义应用承载修改后的模型:

  1. 执行命令创建应用:python manage.py startapp custom_auth
  2. 编辑custom_auth/models.py文件,内容如下:
import uuid
from django.db import models
from django.contrib.auth.models import (
    AbstractUser,
    AbstractGroup,
    AbstractPermission,
)
from django.contrib.auth.managers import UserManager, GroupManager

class Permission(AbstractPermission):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

class Group(AbstractGroup):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    permissions = models.ManyToManyField(
        Permission,
        verbose_name="permissions",
        blank=True,
    )
    objects = GroupManager()

class User(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    groups = models.ManyToManyField(
        Group,
        verbose_name="groups",
        blank=True,
        help_text="用户所属用户组,用户将继承所属用户组的所有权限",
        related_name="user_set",
        related_query_name="user",
    )
    user_permissions = models.ManyToManyField(
        Permission,
        verbose_name="用户权限",
        blank=True,
        help_text="用户专属的权限配置",
        related_name="user_set",
        related_query_name="user",
    )
    objects = UserManager()

步骤2:修改项目配置

编辑settings.py文件做如下调整:

  • 从INSTALLED_APPS中移除默认的django.contrib.auth,新增刚才创建的custom_auth
  • 新增模型替换配置:
INSTALLED_APPS = [
    # 移除 'django.contrib.auth' 条目
    'custom_auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 其他你的项目应用
]

# 新增以下配置,指定自定义的auth模型
AUTH_USER_MODEL = 'custom_auth.User'
AUTH_GROUP_MODEL = 'custom_auth.Group'
AUTH_PERMISSION_MODEL = 'custom_auth.Permission'

步骤3:生成并应用迁移

  1. 执行命令生成自定义auth应用的迁移文件:python manage.py makemigrations custom_auth
  2. 检查生成的迁移文件,确认三个模型的主键均为UUIDField,外键关联关系正确
  3. 若为新项目未运行过任何迁移,直接执行python manage.py migrate即可
  4. 若之前已经运行过默认auth的迁移,需先删除数据库中django_migrations表内所有app为auth的记录,再删除原有的auth_*系列表,最后执行迁移命令

步骤4:更新已有迁移和模型引用

  • 检查项目中其他模型的外键、多对多、一对一关联,所有原来关联auth.User、auth.Group、auth.Permission的字段,全部修改为关联custom_auth下的对应模型,优先使用settings.AUTH_USER_MODEL等配置项引用避免硬编码
  • 若之前已经生成过包含auth关联的迁移文件,可直接删除旧迁移文件重新生成,也可手动修改迁移文件中所有对默认auth模型的引用为自定义模型
  • 若有存量数据,需额外编写数据迁移脚本,将原有auth_*表的数据迁移到新的custom_auth_*表中,同步更新所有关联外键的主键值

内容的提问来源于stack exchange,提问作者Huan Ho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:06:01