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

如何彻底移除Django默认模型及迁移?保留Admin时遇权限报错

移除django.contrib.auth后Admin报错的解决方法

报错原因

Django Admin默认依赖django.contrib.auth中的Permission模型实现后台权限管理,直接从INSTALLED_APPS中移除django.contrib.auth后,Admin无法找到该模型,因此抛出RuntimeError。

解决方案

方案一:自定义AdminSite,彻底移除权限依赖

适合完全不需要用户权限控制的小型项目,步骤如下:

  1. 在项目中创建或修改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')
  1. 修改项目urls.py,替换默认Admin路由:
from django.urls import path
from .admin import admin_site

urlpatterns = [
    path('admin/', admin_site.urls),
    # 其他项目路由
]
  1. 调整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模型:

  1. 在自定义应用的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'
  1. 在settings.py中指定自定义User模型:
AUTH_USER_MODEL = 'your_app.MinimalUser'
  1. 执行迁移后,只会生成精简的用户表,避免默认auth模块的冗余模型。

内容的提问来源于stack exchange,提问作者Maedeh Sh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:27:44