首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django管理中的排序模型-轻量级/正确方式

Django管理中的排序模型-轻量级/正确方式
EN

Stack Overflow用户
提问于 2012-12-23 05:37:34
回答 6查看 7.2K关注 0票数 7

我想在我的Django管理界面中订购模型。默认情况下,应用程序中的模型按字母顺序排列。

我想避免创建额外的软件包等,或不得不改变Django本身。

这可以通过覆盖Django管理模板或其他轻量级方式来实现吗?

编辑:

我不想订购最后的物品,像一张待办事项清单。

我想在管理的索引页面中订购不同型号的。例如,todos出现在cars之前。

EN

回答 6

Stack Overflow用户

发布于 2012-12-23 07:39:09

您可以重写模板并添加模板以进行排序。这里有一个片段,它可能需要一些修改,http://djangosnippets.org/snippets/1939/

票数 4
EN

Stack Overflow用户

发布于 2012-12-23 09:28:25

我不认为有一种轻量级的方法--首先,它没有存储订单的功能,所以它至少会在某个地方使用一个新的数据库字段,然后编写代码来获取该字段以找到所需的排序。实际上,这可能不起作用,因为AdminSite是动态构造的,并且没有存储在数据库中.嗯,让我们看看Django做什么..。

索引模板只是管理注册应用程序上的一个循环,在每个应用程序中都是一个模型循环。这些排序由https://github.com/django/django/blob/master/django/contrib/admin/sites.py中的第384行定义-因此一个钩子将是子类AdminSite并重写索引方法。制作新的AdminSite的东西在这里讨论:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adminsite-objects

也许,如果您想按照注册的顺序显示模型,您可以在该方法中取出排序行。

票数 3
EN

Stack Overflow用户

发布于 2015-10-26 16:39:08

我要留下一个不太好的答案。

在django/cont肋骨/admin/sites.py中的第448行对模型进行排序。

代码语言:javascript
运行
复制
448        # Sort the models alphabetically within each app.
449        for app in app_list:
450            app['models'].sort(key=lambda x: x['name'])

我还没有对其进行测试,但是您可以尝试向模型的Meta类中添加一个变量,用于在第403行for循环中的admin索引页中设置模型的顺序。

代码语言:javascript
运行
复制
403        for model, model_admin in self._registry.items():
               ,,,
431                    else:
432                        order = model._meta.order
433                        app_dict[app_label] = {
434                            'order': order,
435                            ...

并将该类型替换为以下内容:

代码语言:javascript
运行
复制
450            app['models'].sort(key=lambda x: x['order'])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14008892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档