Django Admin模块的都有哪些表以及之间的关系

Django Admin模块对应的所有数据库表,以及这些表之间的直接关联关系,我能帮你理清Admin后台权限、日志等核心功能的底层数据结构。

一、Django Admin核心关联表(含auth模块)

Django Admin本身没有独立的专属表 ,它的运行完全依赖Django auth认证模块和contenttypes模块的核心表,这些表在执行migrate后自动生成。以下是Admin功能直接关联的所有表,以及它们的作用和关联关系:

1. 核心表清单(默认表名前缀)

|------------------------------|--------------|---------------------|-------------|
| 表名 | 所属模块 | 核心作用 | Admin依赖场景 |
| auth_user | auth | 存储所有用户(管理员/普通用户) | 后台登录、用户权限校验 |
| auth_group | auth | 用户组(批量管理权限) | 后台按组分配权限 |
| auth_permission | auth | 模型级权限(如增删改查某张业务表) | 后台权限控制的核心 |
| django_content_type | contenttypes | 记录所有模型的元数据(app+模型名) | 关联权限到具体模型 |
| django_admin_log | admin | 后台操作日志(谁、何时、操作了什么) | 后台展示操作日志、审计 |
| auth_user_groups | auth | 用户与组的多对多关联表(自动生成) | 关联用户到所属组 |
| auth_user_user_permissions | auth | 用户与权限的多对多关联表(自动生成) | 给用户单独分配权限 |
| django_session | sessions | 用户会话(登录状态) | 维持后台登录状态 |

2. 表之间的直接关联关系(核心)

ER图直观展示核心关联(简化版):

复制代码
3. 关联关系详细说明
(1)django_content_typeauth_permission(核心关联)
  • 关联字段auth_permission.content_type_iddjango_content_type.id
  • 逻辑 :每个权限(如"添加文章")都绑定到一个具体的模型(如blog.Article),django_content_type就是这个模型的"身份证",记录app_label(如blog)和model(如article)。
  • Admin场景:Admin后台能精准控制"谁能操作哪张表",就是靠这个关联。
(2)auth_userauth_group(多对多)
  • 关联表auth_user_groups(自动生成的中间表)
  • 关联字段auth_user_groups.user_idauth_user.idauth_user_groups.group_idauth_group.id
  • 逻辑:一个用户可以属于多个组,一个组可以包含多个用户,中间表存储这种多对多关系。
  • Admin场景:Admin后台"用户管理"中,给用户分配"管理员组""编辑组",就是操作这个关联。
(3)auth_user/auth_groupauth_permission(多对多)
  • 用户-权限 :中间表auth_user_user_permissions,字段user_id/permission_id
  • 组-权限 :中间表auth_group_permissions(自动生成),字段group_id/permission_id
  • 逻辑:权限可以直接分配给用户,也可以分配给组(组内用户继承权限)。
  • Admin场景:Admin后台"权限管理"中,给用户/组勾选"添加/修改/删除"权限,就是操作这两个关联。
(4)auth_userdjango_admin_log(一对多)
  • 关联字段django_admin_log.user_idauth_user.id
  • 逻辑:每个后台操作日志(如"张三修改了文章ID=1")都归属到一个具体的用户,方便审计。
  • Admin场景:Admin后台"操作日志"页面,能看到"操作用户"列,就是这个关联的体现。
(5)django_sessionauth_user(间接关联)
  • 关联逻辑django_session存储session_key(浏览器Cookie)和session_data(加密的用户ID),不直接存外键,但通过session数据关联到auth_user.id
  • Admin场景 :用户登录后台后,Django通过session找到对应的auth_user,维持登录状态。

二、关键补充(新手易混淆)

  1. admin_user :再次强调,Django原生没有admin_user表,所有后台管理员都存在auth_user表中,仅通过is_staff=True标识"可登录后台"。
  2. 中间表自动生成auth_user_groupsauth_user_user_permissionsauth_group_permissions都是多对多关系的中间表,Django自动创建和维护,无需手动修改。
  3. 自定义用户模型的影响 :如果通过AUTH_USER_MODEL自定义用户表(如myapp.MyUser),则auth_user表不会生成,取而代之的是myapp_myuser,但关联关系和上述逻辑完全一致。

总结

  1. Django Admin的核心表本质是auth模块+contenttypes模块的表,核心关联是django_content_type绑定auth_permission,再通过用户/组关联权限;
  2. 所有Admin的权限控制、操作日志、登录状态,都依赖这些表的关联关系;
  3. 中间表(如auth_user_groups)是多对多关系的载体,由Django自动维护,无需手动修改。
相关推荐
憧憬成为web高手1 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学1 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh3 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789864 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD4 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
Ai_easygo5 小时前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite
TlSfoward5 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记6 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发6 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB6 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库