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自动维护,无需手动修改。
相关推荐
青衫码上行2 小时前
Redis持久化 (快速入门)
数据库·redis·缓存
数据知道2 小时前
PostgreSQL:详解 PostGIS 地理信息数据处理
数据库·postgresql
小草儿7992 小时前
pg18权限篇章
数据库
剑之所向2 小时前
Mysql参数化
数据库·mysql·oracle
_千思_2 小时前
【小白说】数据库系统概念 3
数据库
海兰2 小时前
elasticsearch学习之基本概念-向量数据库
数据库·学习·elasticsearch
014-code3 小时前
Spring Boot 集成 Neo4j 图数据库实战教程
java·数据库·neo4j
大鹏说大话3 小时前
深入理解 MySQL 查询语句的执行顺序与函数调用机制
数据库·mysql