Python 在django管理面板中对模型对象重新排序
我在Python 在django管理面板中对模型对象重新排序,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我在django管理面板中有几个配置对象。 它们按以下顺序列出 电子邮件配置 通用配置 网络配置 每个对象都可以单独配置,但所有对象都包含在General config中。所以基本上你需要的是常规配置,所以我想把它移到顶部。 我知道如何在模型本身中对字段进行排序,但如何对模型进行重新排序?我看不到一个明显的解决方案-模型按其_meta.verbose\u name\u复数排序,这发生在AdminSite.index视图中,没有明显的地方可以钩住自定义代码,缺少AdminSite类的子类化和提
django
管理面板中有几个配置对象。
它们按以下顺序列出
- 电子邮件配置
- 通用配置
- 网络配置
General config
中。所以基本上你需要的是常规配置
,所以我想把它移到顶部。
我知道如何在模型本身中对字段进行排序,但如何对模型进行重新排序?我看不到一个明显的解决方案-模型按其_meta.verbose\u name\u复数排序,这发生在AdminSite.index视图中,没有明显的地方可以钩住自定义代码,缺少AdminSite类的子类化和提供您自己的索引方法,这是一个巨大的整体方法,非常不利于继承。我发现-它对我们很有用(尽管查看代码段下面的注释以获取更新,使其与Django>=1.4一起工作)
从长远来看,是这样的。错误报告在编写此答案时已打开。因此我刚刚编写了一个django软件包,允许您重新排序django应用程序列表/重命名应用程序标签和型号名称(包括第三方应用程序)-您可以从此处下载:
如果您不介意使用肮脏的伎俩,请在您的模型前面加上一定数量的不可见字符。例如,在“电子邮件配置”前面加上1个零宽度空格,“常规配置”前面加上2个空格,“网络配置”前面加上3个空格。这确实是最简单的方法,我还没有发现任何缺点。如果你只是想重新排序你的应用程序(使用Django 1.11.10测试)
我看不到一个明显的解决方案-模型是按其
\u meta.verbose\u name\u复数
排序的,这发生在AdminSite.index
视图中,没有明显的地方可以钩住自定义代码,除了对AdminSite
类进行子类化并提供您自己的index
方法之外,这是一个巨大的单一方法,非常不利于继承。好的:(你能不能写一个答案,说明这不是一件合理的事情,这样我就可以结束这个问题了?所以我刚刚写了一个django软件包,允许你重新排序django应用程序列表/重命名应用程序标签和型号名称(包括第三方应用程序)-您可以从此处下载:
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)