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自动维护,无需手动修改。
相关推荐
ACP广源盛13924625673几秒前
M6/M5 Pro Mac mini 端侧 AI 爆发@ACP#YLB3118 存储扩展芯片在本地 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
隔窗听雨眠9 分钟前
关系型数据库长期可维护性完全指南:设计、索引、运维、安全的系统性实践
数据库
涛思数据(TDengine)23 分钟前
从“改了就改了“到“每一次变更都可追溯“:工业 AI 实战直播(十二期)
大数据·数据库·人工智能·时序数据库·tdengine
xixingzhe224 分钟前
spring boot项目接口访问慢问题解决方案
java·数据库·spring boot
oradh30 分钟前
Oracle普通表改造分区表的方法总结
数据库·oracle·普通表改造分区表
Gent_倪30 分钟前
MySQL 与 Hive 语法异同点详解
数据库·hive·mysql
七夜zippoe31 分钟前
DolphinDB 故障排查实战:系统、数据库与集群常见问题诊断
数据库·wpf·集群·常见问题·故障排查·dolphindb
!chen1 小时前
数据库主从有延迟怎么处理
数据库·adb
SelectDB技术团队1 小时前
Apache Doris 多云原生实践:SaaS、BYOC 与四大公有云覆盖
数据库·阿里云·云原生·华为云·腾讯云·亚马逊云·写入更新
云飞云共享云桌面3 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造