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

如何在Django admin面板中隐藏rest_framework.authtoken的Token模型

Django admin隐藏DRF Token模型的正确实现方法

报错原因

你遇到的The model Token is not registered报错是因为unregister代码的执行时机早于rest_framework.authtoken完成admin注册的时机,执行注销操作时模型还没被注册到admin站点,自然抛出未注册错误。

实现方案

方案1:调整APP注册顺序(简单易用)

  1. 首先修改项目settings.py的INSTALLED_APPS配置,确保你要写入注销代码的自定义APP,排序在rest_framework.authtoken之后:
INSTALLED_APPS = [
    # Django原生APP
    'django.contrib.admin',
    'django.contrib.auth',
    # ... 其他原生依赖
    'rest_framework',
    'rest_framework.authtoken', # DRF的token模块先注册
    'your_custom_app' # 你的自定义APP放在后面
]
  1. 在你的自定义APP的admin.py文件中加入以下代码:
from django.contrib import admin
from rest_framework.authtoken.models import TokenProxy

# 优先判断是否已注册,避免重复执行报错
if admin.site.is_registered(TokenProxy):
    admin.site.unregister(TokenProxy)

方案2:使用AppConfig的ready钩子(更稳定,无需调整APP顺序)

不需要调整INSTALLED_APPS的排序,通过Django应用启动完成后的自动回调执行注销操作:

  1. 修改自定义APP的apps.py文件,给对应的AppConfig类添加ready方法:
from django.apps import AppConfig

class YourCustomAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_custom_app'

    def ready(self):
        from django.contrib import admin
        from rest_framework.authtoken.models import TokenProxy
        if admin.site.is_registered(TokenProxy):
            admin.site.unregister(TokenProxy)
  1. 检查settings.py的INSTALLED_APPS配置,确保你的自定义APP注册的是上面的AppConfig类:
INSTALLED_APPS = [
    # ... 其他依赖
    'rest_framework.authtoken',
    'your_custom_app.apps.YourCustomAppConfig' # 注册AppConfig而不是直接写APP名
]

注意事项

  • 如果你使用的是3.12.0之前的旧版本DRF,admin注册的是原生Token模型,把上面代码中的TokenProxy替换为Token即可
  • 保留admin.site.is_registered()的判断逻辑,可以避免服务重启、代码热重载时重复执行注销操作抛出的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:30:02