zoukankan      html  css  js  c++  java
  • Django Admin Cookbook-42如何在Django Admin后台控制台中设置应用程序和模型的顺序

    42.如何在Django Admin后台控制台中设置应用程序和模型的顺序

    Django默认情况下,按字母顺序对模型进行排序。因此,Event应用模型的顺序为Epic、EventHero、EventVillain、Event

    假设你希望顺序是

    • EventHero、EventVillain、Epic、Event。

    用于呈现后台indxe页面的模板为admin/index.html,对应的视图函数为 ModelAdmin.index。

    def index(self, request, extra_context=None):
        """
        Display the main admin index page, which lists all of the installed
        apps that have been registered in this site.
        """
        app_list = self.get_app_list(request)
        context = {
            **self.each_context(request),
            'title': self.index_title,
            'app_list': app_list,
            **(extra_context or {}),
        }
        request.current_app = self.name
        return TemplateResponse(request, self.index_template or
            'admin/index.html', context)
    

    默认的get_app_list方法用于设置模型的顺序。

    def get_app_list(self, request):
        """
        Return a sorted list of all the installed apps that have been
        registered in this site.
        """
        app_dict = self._build_app_dict(request)
    
        # Sort the apps alphabetically.
        app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())
    
        # Sort the models alphabetically within each app.
        for app in app_list:
            app['models'].sort(key=lambda x: x['name'])
        return app_list
    

    因此,可以通过覆盖get_app_list方法来修改显示顺序:

    class EventAdminSite(AdminSite):
        def get_app_list(self, request):
            """
            Return a sorted list of all the installed apps that have been
            registered in this site.
            """
            ordering = {
                "Event heros": 1,
                "Event villains": 2,
                "Epics": 3,
                "Events": 4
            }
            app_dict = self._build_app_dict(request)
            # a.sort(key=lambda x: b.index(x[0]))
            # Sort the apps alphabetically.
            app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())
            # Sort the models alphabetically within each app.
            for app in app_list:
                app['models'].sort(key=lambda x: ordering[x['name']])
            return app_list
    

    以上代码app['models'].sort(key=lambda x: ordering[x['name']])用来设置默认顺序。修改后效果如下。

    返回目录

  • 相关阅读:
    java String format格式字符串语法
    spring 小示例 yongqi
    mysql GROUP_CONCAT()函数最大长度之坑 yongqi
    连接数据库超时设置autoReconnect=true mysql经典的8小时问题 yongqi
    Kafka 可视化工具(Kafka Tool) yongqi
    kettle 优化 yongqi
    mysql 修改字段名 yongqi
    SQL: Cannot drop database XXX because it is currently in use解决方法 yongqi
    .Net Core 控制台应用程序 依赖注入
    记一次部署Skywalking(基于Elasticsearch),并使用 .NET6接入Skywalking
  • 原文地址:https://www.cnblogs.com/superhin/p/12192535.html
Copyright © 2011-2022 走看看