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

如何在Django Admin面板自定义应用与模型排序

Django后台自定义模型排序问题解决

问题背景

需要在Django 4.1后台面板中为指定应用的模型列表设置自定义排序顺序,当前模型显示状态如下:
当前模型显示状态

尝试过多种教程及社区方案,要么依赖第三方库,要么未明确代码放置位置。其中一个教程的方案逻辑可行,但将代码放入应用的admin.py后无效果,代码如下:

class WebsiteAdminSite(admin.AdminSite):
    def get_app_list(self, request):
        """
        返回已注册应用的排序后列表
        """
        ordering = {
            "Menues": 1,
            "Entrees": 2,
            "First_dishes": 3,
            "Second_dishes": 4,
            "Side_dishes": 5,
            "Desserts": 6,
            "Wines": 7,
            "Opening_hours": 8,
            "Contacts": 9,
            "Gallery_images": 10,
        }
        app_dict = self._build_app_dict(request)
        # 按字母顺序排序应用
        app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())

        # 为每个应用内的模型按自定义规则排序
        for app in app_list:
            app['models'].sort(key=lambda x: ordering[x['name']])

        return app_list

无报错但不生效,尝试添加以下代码时触发django.contrib.admin.sites.catch_all_view错误:

mysite = WebsiteAdminSite()
admin.site = mysite
sites.site = mysite

项目结构调整与配置

当前项目结构:

-base
  -base
    admin.py
    apps.py
    asgi.py
    settings.py
    urls.py
    wsgi.py
  -website(应用文件夹)
    -migrations
    -templates
    admin.py
    apps.py
    models.py
    tests.py
    urls.py
    views.py
  -dbsqlite3
  manage.py

正确配置步骤

  1. 将上述WebsiteAdminSite类放入项目根目录的base/admin.py文件中
  2. 修改项目根目录的base/apps.py,添加自定义Admin配置类:
from django.contrib.admin.apps import AdminConfig

class WebsiteAdminConfig(AdminConfig):
    default_site = 'base.admin.WebsiteAdminSite'
  1. 修改settings.py中的INSTALLED_APPS,替换默认的admin应用:
INSTALLED_APPS = [
    'base.apps.WebsiteAdminConfig',
    #'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'website',
    
]

新问题修复

配置完成后出现KeyError: 'Groups',原因是排序字典未包含Django自带的Groups和Users模型。

修复方法

在WebsiteAdminSite类的ordering字典中补充这两个模型的排序值:

ordering = {
    "Menues": 1,
    "Entrees": 2,
    "First_dishes": 3,
    "Second_dishes": 4,
    "Side_dishes": 5,
    "Desserts": 6,
    "Wines": 7,
    "Opening_hours": 8,
    "Contacts": 9,
    "Gallery_images": 10,
    "Groups":11,
    "Users":12,
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:27