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

  1. 安装插件:pip install django-admin-model-list-order
  2. 在settings.py中配置插件、中间件及默认序号
# settings.py...
INSTALLED_APPS = (    ...    'admin_model_list_order',    ...)
MIDDLEWARE_CLASSES = (    ...    'admin_model_list_order.middleware.AdminModelListOrder',    ...)
ADMIN_MODEL_DEFAULT_PRIORITY = 100
  1. 在模型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 capfirst
class 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_site
urlpatterns = [    path('admin/', admin.site.urls),    path('custom_admin/', custom_site.urls),]
THE END