如何彻底移除Django默认模型及迁移?保留Admin时遇权限报错
移除django.contrib.auth后Admin报错的解决方法
报错原因
Django Admin默认依赖django.contrib.auth中的Permission模型实现后台权限管理,直接从INSTALLED_APPS中移除django.contrib.auth后,Admin无法找到该模型,因此抛出RuntimeError。
解决方案
方案一:自定义AdminSite,彻底移除权限依赖
适合完全不需要用户权限控制的小型项目,步骤如下:
- 在项目中创建或修改
admin.py,定义不依赖权限的AdminSite:
from django.contrib.admin import AdminSite class NoAuthAdminSite(AdminSite): def has_permission(self, request): # 跳过所有权限验证,允许访问Admin后台 return True # 实例化自定义站点 admin_site = NoAuthAdminSite(name='noauth_admin')
- 修改项目
urls.py,替换默认Admin路由:
from django.urls import path from .admin import admin_site urlpatterns = [ path('admin/', admin_site.urls), # 其他项目路由 ]
- 调整
settings.py中的INSTALLED_APPS,移除django.contrib.auth,保留Admin必需的依赖:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 你的自定义应用 ]
注意:此方式会关闭Admin的权限校验,所有访问
/admin的请求都能操作后台,需根据项目需求使用。
方案二:保留auth但精简模型(适合需要基础用户功能的场景)
如果需要保留部分用户相关功能但不需要默认的User/Group/Permission模型:
- 在自定义应用的
models.py中创建极简User模型:
from django.db import models class MinimalUser(models.Model): username = models.CharField(max_length=150, unique=True, primary_key=True) class Meta: db_table = 'auth_user'
- 在
settings.py中指定自定义User模型:
AUTH_USER_MODEL = 'your_app.MinimalUser'
- 执行迁移后,只会生成精简的用户表,避免默认auth模块的冗余模型。
内容的提问来源于stack exchange,提问作者Maedeh Sh
相关产品推荐
相关产品推荐

