Django Admin:如何自定义app中模型显示顺序
Django Admin中,模型的顺序默认是安装名称进行排序的,如下图:
如果想自定义app中模型显示顺序,可以有如下方法:
方法1-模型名称添加序号#
当然这是最简单的一种方法,我们可以在模型内部的Meta类中通过verbose_name_plural来定制模型的显示顺序,如下图:

当然这不够优雅,在某些列表页也会显示这个序号。
方法2-使用插件django-admin-model-list-order#
参考:https://github.com/Vikrant-Arya/django-admin-model-list-order
- 安装插件:
pip install django-admin-model-list-order - 在settings.py中配置插件、中间件及默认序号
# settings.py...INSTALLED_APPS = (...'admin_model_list_order',...)MIDDLEWARE_CLASSES = (...'admin_model_list_order.middleware.AdminModelListOrder',...)ADMIN_MODEL_DEFAULT_PRIORITY = 100
- 在模型Admin模型中使
admin_order制定顺序,如下图:

app_list是Django管理界面首页中显示的应用程序列表。每个应用程序在app_list中都以一个按钮或链接的形式显示,并且可以点击来访问该应用程序的管理界面。默认情况下,Django会自动根据项目中的每个应用程序生成对应的app_list。然而,在某些情况下,我们可能需要自定义app_list的内容和显示方式。
以通过重写AdminSite类中的get_app_list方法来定义自定义的app_list。
首先,需要创建一个自定义的AdminSite子类,并重写get_app_list方法。假设要将某些应用程序添加到app_list中,可以按照以下步骤进行操作:
from django.contrib.admin import AdminSitefrom django.utils.text import capfirstclass CustomAdminSite(AdminSite):def get_app_list(self, request):app_list = super().get_app_list(request)# 添加自定义应用程序到app_list中app_list.append({'name': 'Custom App','app_label': 'custom_app','app_url': '/custom_app/','models': [],})# 对app_list进行排序app_list.sort(key=lambda x: x['name'])return app_list# 将自定义的AdminSite注册到Django中custom_site = CustomAdminSite(name='custom_admin')
在get_app_list方法中,调用父类的get_app_list方法获取默认的app_list。然后添加了一个自定义应用程序到app_list中,以字典的形式提供了应用程序的名称、标签、URL和模型列表,对app_list进行了排序,并返回了最终的app_list。
最后需要将自定义的AdminSite注册到Django中。在项目的urls.py文件中添加以下代码:
from django.contrib import adminfrom myproject.admin import custom_siteurlpatterns = [path('admin/', admin.site.urls),path('custom_admin/', custom_site.urls),]
THE END




