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
相关产品推荐
相关产品推荐

