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

Django模型多对多关联生成额外多余数据表问题求助

问题原因

你多出来的users_groups表和你自定义的多对多配置无关,是继承AbstractUser带来的内置字段导致的:
AbstractUser默认内置了groups、user_permissions两个多对多字段,用来对接Django原生的权限系统。你给自定义用户模型设置了db_table = 'users',Django生成内置groups字段的中间表时,会按照「用户表名+关联字段名」的规则拼接,最终得到users_groups的表名,就是你看到的多余表。

解决方案

根据你的业务需求二选一即可:

  • 如果你完全不需要使用Django原生的权限、用户组功能,直接在CustomUser类中覆盖掉这两个内置字段即可,不会影响你自己定义的Group、UserGroup模型逻辑:
class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(max_length=100, unique=True)
    is_admin = models.BooleanField(default=False)
    # 新增下面两行,屏蔽内置权限相关字段
    groups = None
    user_permissions = None
    
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    class Meta:
        ordering = ['email']
        db_table = 'users'
  • 如果你需要保留Django原生权限功能,只是额外自定义了业务层面的用户分组,可以给内置groups字段修改related_name避免和你的自定义逻辑冲突,对应users_groups表会继续存在,属于正常现象。

内容的提问来源于stack exchange,提问作者A l w a y s S u n n y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:45:03