在Django框架中,Django Admin是一个强大的工具,它提供了管理界面,允许开发者方便地创建、编辑和删除数据库中的对象。然而,默认情况下,Django Admin按照应用程序和模型名称的字母顺序来排列这些对象,这可能不符合某些开发者的定制需求。本篇文章将详细讲解如何自定义Django Admin中应用程序及模型的显示顺序。 我们要理解Django Admin的默认行为。在`admin/index.html`模板中,Django会展示所有已注册的应用程序列表,每个应用程序下包含其注册的模型。`ModelAdmin.index`视图函数负责生成这个列表,而`get_app_list`方法则负责获取并排序这些应用和模型。 默认的`get_app_list`方法首先通过`_build_app_dict`方法构建一个包含所有应用程序及其模型的字典,然后根据应用的名称('name')进行排序,接着对每个应用内的模型再次按照模型名称进行排序。 如果要改变这种默认排序,我们可以自定义`get_app_list`方法。例如,创建一个新的`AdminSite`子类,如`EventAdminSite`,并覆盖`get_app_list`方法: ```python from django.contrib import admin class EventAdminSite(admin.AdminSite): def get_app_list(self, request): ordering = { "Event heros": 1, "Event villains": 2, "Epics": 3, "Events": 4, } 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 ``` 在这个例子中,我们创建了一个名为`ordering`的字典,键是模型名称,值是排序权重。在`get_app_list`方法中,我们使用这个字典作为排序的关键依据,使得模型按照指定的顺序排列。这样,`Event`应用下的`EventHero`、`EventVillain`、`Epic`和`Event`模型就会按照我们期望的顺序显示。 在自定义`AdminSite`类之后,你需要在你的项目中注册这个新的站点,并将其关联到相应的模型上,以确保新的排序规则生效。例如: ```python from django.apps import apps from .models import EventHero, EventVillain, Epic, Event event_admin_site = EventAdminSite(name='event_admin') event_admin_site.register(EventHero) event_admin_site.register(EventVillain) event_admin_site.register(Epic) event_admin_site.register(Event) # 将新的AdminSite实例添加到URL配置中 urlpatterns = [ # ... path('admin/', event_admin_site.urls), ] ``` 通过这种方式,你可以自由调整Django Admin中的应用程序和模型显示顺序,以满足项目的特定需求。记住,定制Django Admin不仅可以提高用户体验,还可以使管理界面更加符合业务逻辑,从而提高开发效率。
- 粉丝: 7
- 资源: 948
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助