Django自定义用户模型后访问Admin用户页提示users_user_groups不存在报错
Django自定义用户模型报错
users_user_groups不存在解决方法 报错原文:
relation "users_user_groups" does not exist LINE 1: ... "auth_group"."name" FROM "auth_group" INNER JOIN "users_use...
错误根因
你自定义的User模型继承了PermissionsMixin,这个类会自动生成用户与权限组、用户与全局权限的两个多对多关联表users_user_groups、users_user_user_permissions,报错说明这两个表没有被正确创建,通常是配置错误、迁移流程出错导致的。
修复步骤
1. 检查核心配置
确认settings.py中已经添加自定义用户模型的指定配置,注意要替换成你自己的App名称:
# 比如你的用户模型写在users这个App的models.py里,配置如下 AUTH_USER_MODEL = "users.User"
注意:这个配置必须在第一次执行项目迁移前添加,如果是已经执行过默认auth表迁移后才添加,就会出现关联表不生成的问题,需要按第二步清理旧迁移。
2. 清理旧迁移并重新生成
如果是开发环境,建议直接按以下流程重置迁移:
- 删除你的用户模型所在App下
migrations文件夹中,除了__init__.py之外的所有文件 - 清空数据库(如果数据不重要直接删库重建即可),或者至少删除数据库中
django_migrations表里所有和auth、用户App相关的迁移记录 - 重新执行迁移命令:
python manage.py makemigrations python manage.py migrate
3. 修正Admin注册逻辑
不要用默认的ModelAdmin注册自定义用户模型,要使用Django自带的UserAdmin适配,避免Admin读取默认auth表的字段,示例代码:
# users/admin.py from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from .models import User class UserAdmin(BaseUserAdmin): fieldsets = ( (None, {'fields': ('email', 'username', 'password')}), ('权限配置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), ('时间信息', {'fields': ('date_joined', 'last_login')}), ) add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'username', 'password1', 'password2'), }), ) list_display = ('email', 'username', 'is_staff') search_fields = ('email', 'username') ordering = ('email',) admin.site.register(User, UserAdmin)
4. 额外代码修正
你自定义User模型里的权限方法名写错了,has_module_perm末尾要加s,正确写法是:
def has_module_perms(self, app_label): return True
否则权限校验的时候会出现未知异常。
内容的提问来源于stack exchange,提问作者SMEET KOTHARI
相关产品推荐
相关产品推荐

