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']])用来设置默认顺序。修改后效果如下。

    返回目录

  • 相关阅读:
    UISlider
    App两个页面之间的正反传值方法
    UIImageview的简单运用
    UIPickerview 基本使用
    IOS开发中用开关(UISwitch)跟滑块(UISlider)控制手机屏幕的亮度
    冒泡排序
    简单抽屉实现
    iOS 模态视图,视图之间的切换
    UIScrollView和UIPageControl的使用(实现图片的循环滚动)
    iOS中UIPickerView实现省/市连动
  • 原文地址:https://www.cnblogs.com/superhin/p/12192535.html
Copyright © 2011-2022 走看看