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

求助:django-modeladmin-reorder无法生效于Django Admin侧边导航栏

解决Django Admin侧边导航栏模型分组排序问题

1. 核对django-modeladmin-reorder配置完整性

确保settings.py中的MODELADMIN_REORDER配置覆盖所有需要调整的应用和模型(包括第三方库模型),示例配置如下:

MODELADMIN_REORDER = (
    # 自定义业务分组
    {'app': 'myapp', 'label': '核心业务模块', 'models': (
        'myapp.Order',
        'myapp.Customer',
    )},
    # 权限管理分组
    {'app': 'auth', 'label': '系统权限', 'models': (
        'auth.User',
        'auth.Group',
    )},
    # 第三方库模型分组
    {'app': 'django_celery_beat', 'label': '定时任务管理', 'models': (
        'django_celery_beat.PeriodicTask',
        'django_celery_beat.CrontabSchedule',
    )},
)

未在配置中列出的应用/模型会默认按原始顺序排在末尾,容易造成配置未生效的错觉。

2. 自定义AdminSite强制处理侧边栏上下文

django-modeladmin-reorder可能未对侧边栏的app_list上下文生效,可通过自定义AdminSite重写each_context方法,手动应用排序规则:

from django.contrib.admin import AdminSite
from django_modeladmin_reorder.middleware import ModelAdminReorder
from django.conf import settings

class CustomAdminSite(AdminSite):
    def each_context(self, request):
        context = super().each_context(request)
        # 调用库的排序逻辑处理侧边栏应用列表
        reorder_middleware = ModelAdminReorder(getattr(settings, 'MODELADMIN_REORDER', []))
        context['app_list'] = reorder_middleware._reorder_app_list(request, context['app_list'])
        return context

# 在admin.py中注册模型到自定义站点
admin_site = CustomAdminSite(name='custom_admin')
# 注册自有模型
from .models import Order, Customer
from .admin import OrderAdmin, CustomerAdmin
admin_site.register(Order, OrderAdmin)
admin_site.register(Customer, CustomerAdmin)
# 注册第三方模型(示例为auth模块)
from django.contrib.auth.models import User, Group
from django.contrib.auth.admin import UserAdmin, GroupAdmin
admin_site.register(User, UserAdmin)
admin_site.register(Group, GroupAdmin)

随后在urls.py替换默认Admin路由:

from django.urls import path
from .admin import admin_site

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

3. 清理模板缓存并验证模板逻辑

如果之前自定义过Admin模板,确保侧边栏渲染使用{% for app in app_list %}的动态逻辑,而非硬编码列表。同时清理Django模板缓存:删除项目中的__pycache__目录,或执行python manage.py clearcache命令,避免旧模板内容干扰。

4. 确认第三方模型的注册归属

部分第三方库的模型默认注册到Django原生admin.site,若使用自定义AdminSite,需将这些模型重新注册到自定义站点,否则侧边栏中的第三方模型不会参与排序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:33:19