Django Admin中,模型的顺序默认是安装名称进行排序的,如下图:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
如果想自定义app中模型显示顺序,可以有如下方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
方法1-模型名称添加序号#
当然这是最简单的一种方法,我们可以在模型内部的Meta
类中通过verbose_name_plural
来定制模型的显示顺序,如下图:
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
当然这不够优雅,在某些列表页也会显示这个序号。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
方法2-使用插件django-admin-model-list-order
#
参考:https://github.com/Vikrant-Arya/django-admin-model-list-order文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
- 安装插件:
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的内容和显示方式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
以通过重写AdminSite
类中的get_app_list
方法来定义自定义的app_list。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
首先,需要创建一个自定义的AdminSite
子类,并重写get_app_list
方法。假设要将某些应用程序添加到app_list中,可以按照以下步骤进行操作:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.htmlfrom django.contrib.admin import AdminSite
from 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。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.html
最后需要将自定义的AdminSite
注册到Django中。在项目的urls.py
文件中添加以下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/64979.htmlfrom django.contrib import admin
from myproject.admin import custom_site
urlpatterns = [
path('admin/', admin.site.urls),
path('custom_admin/', custom_site.urls),
]