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

如何在Django Admin面板中隐藏BlacklistedToken和OutstandingToken?

解决Django Admin中隐藏BlacklistedToken和OutstandingToken模型的问题

问题分析

使用rest_framework_simplejwt的token_blacklist功能时,该模块会自动将BlacklistedToken和OutstandingToken注册到Django Admin中。直接在项目的admin.py中执行unregister会报错,原因是项目代码的加载顺序早于rest_framework_simplejwt的注册逻辑,执行unregister时模型还未被注册;而先注册再注销的方式仅移除了自己注册的实例,原模块注册的模型仍会显示。


可行解决方案

方案1:利用AppConfig的ready方法延迟注销

通过AppConfig的ready方法,确保在所有模型注册完成后再执行注销操作:

  1. 在你的主应用目录下创建/修改apps.py:
from django.apps import AppConfig
from django.contrib import admin

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = '你的应用名称'  # 替换为实际应用名

    def ready(self):
        # 等待所有模型注册完成后再尝试注销
        from rest_framework_simplejwt.token_blacklist.models import BlacklistedToken, OutstandingToken
        try:
            admin.site.unregister(BlacklistedToken)
            admin.site.unregister(OutstandingToken)
        except admin.exceptions.NotRegistered:
            pass
  1. 在settings.py的INSTALLED_APPS中,将原应用名称替换为上述AppConfig的路径,同时确保你的应用放在rest_framework_simplejwt之后:
INSTALLED_APPS = [
    # 其他应用...
    'rest_framework_simplejwt',
    'rest_framework_simplejwt.token_blacklist',
    '你的应用名称.apps.YourAppConfig',  # 替换为实际路径
]

方案2:自定义AdminSite过滤模型

如果方案1无效,可以自定义AdminSite,直接过滤掉这两个模型:

  1. 在应用的admin.py中定义自定义AdminSite:
from django.contrib.admin import AdminSite
from django.contrib import admin

class CustomAdminSite(AdminSite):
    def get_app_list(self, request):
        app_list = super().get_app_list(request)
        filtered_apps = []
        for app in app_list:
            if app['app_label'] == 'token_blacklist':
                # 移除目标模型
                app['models'] = [
                    model for model in app['models'] 
                    if model['object_name'] not in ['BlacklistedToken', 'OutstandingToken']
                ]
                # 若该分类下无剩余模型,则不显示
                if app['models']:
                    filtered_apps.append(app)
            else:
                filtered_apps.append(app)
        return filtered_apps

# 实例化自定义AdminSite
admin_site = CustomAdminSite(name='custom_admin')

# 手动注册你需要在Admin中显示的模型
# 示例:from .models import YourModel; admin_site.register(YourModel)
  1. 在项目的urls.py中替换默认的Admin路由:
from django.urls import path
from 你的应用名称.admin import admin_site

urlpatterns = [
    path('admin/', admin_site.urls),
    # 其他路由...
]

方案3:移除token黑名单功能(仅适用于不需要该功能的场景)

如果你的项目不需要token黑名单(无需主动注销token),直接从INSTALLED_APPS中移除rest_framework_simplejwt.token_blacklist即可,这两个模型会被自动移除,不会出现在Admin中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:18:21