在django管理面板中重新排序模型对象

时间:2014-02-05 13:14:44

标签: python django django-models django-admin

我在django管理面板中有几个配置对象。 它们按以下顺序列出

  • 电子邮件配置
  • 一般配置
  • 网络配置

每个对象都可以单独配置,但所有对象都包含在General config中。所以基本上你需要大多数General config,所以我想将它移到顶部。 我知道如何在模型中订购字段,但如何重新排序模型?

5 个答案:

答案 0 :(得分:10)

所以我刚刚写了一个django软件包,允许你重新订购django app list / rename app label和model name(包括第三方应用程序) - 你可以从这里下载:

https://github.com/mishbahr/django-modeladmin-reorder

答案 1 :(得分:4)

我没有看到明显的解决方案 - 模型按其_meta.verbose_name_plural排序,这发生在AdminSite.index视图中,没有明显的地方可以挂钩自定义代码,缺少继承AdminSite类和提供你自己的索引方法,这是一个巨大的单片方法,非常遗传 - 不友好。

答案 2 :(得分:2)

如果您不介意使用肮脏的技巧,请在模型的verbose_name_plural前加上一定数量的隐形zero-width spaces。例如。前缀为“电子邮件配置”,1个零宽度空间,“常规配置”,2个,“网络配置”,3个。这是最简单的方法,我还没有找到任何缺点。

答案 3 :(得分:1)

我发现this snippet for reordering models in the django admin panel - 它适用于我们(虽然请查看更新片段下方的评论,以使其与Django一起使用> = 1.4)

从长远来看,有django bug report about the ordering of models within apps。在撰写此答案时,错误报告已打开。

答案 4 :(得分:0)

如果您只想重新排序应用(使用Django 1.11.10进行测试)。

class MyAdminSite(AdminSite):
    def index(self, request, extra_context=None):
        if extra_context is None:
            extra_context = {}

        # Move last app to the top of `app_list`.
        app_list = self.get_app_list(request)
        app_list.insert(0, app_list.pop(-1))

        extra_context['app_list'] = app_list
        return super().index(request, extra_context)