Django的admin管理后台一直是一个很强大的工具,但是有一个让人很不爽的地方就是model列表的显示顺序是按model名字来的,如果是英文按字母顺序还比较好找,如果是中文则是完全无序了,一个app下的model一多就会比较难找要修改的model。
查看django源代码发现这个顺序是在admin代码里面写死的,并没有可以供人配置的地方。但为了这个修改源代码也不方便维护和升级。所以想到如何在不修改django源代码的情况下,按照model的注册顺序显示,那样就可以将相关的model在一块儿显示了。
其实代码原理非常简单,给django的admin site的index view 和 app_index view这2个函数添加decorator,修改这2个函数的返回值即可。因为从django 1.4开始,这2个函数返回的不是已经render好的HTML页面,而是一个lazy的TemplateResponse (参考 https://docs.djangoproject.com/en/1.4/ref/template-response/ )。这个东西只有在需要的时候才生成HTML页面,而在这之前我们仍可以修改里面的context_data。那样最后render模板的时候就会使用修改后的context_data了。
最后的源代码如下所示:
Python代码 收藏代码
# -*- coding: utf-8 -*-
from django.contrib import admin
from django.utils.text import capfirst
from django.utils.datastructures import SortedDict
def find_model_index(name):
count = 0
for model, model_admin in admin.site._registry.items():
if capfirst(model._meta.verbose_name_plural) == name:
return count
else:
count += 1
return count
def index_decorator(func):
def inner(*args, **kwargs):
templateresponse = func(*args, **kwargs)
for app in templateresponse.context_data['app_list']:
app['models'].sort(key=lambda x: find_model_index(x['name']))
return templateresponse
return inner
registry = SortedDict()
registry.update(admin.site._registry)
admin.site._registry = registry
admin.site.index = index_decorator(admin.site.index)
admin.site.app_index = index_decorator(admin.site.app_index)
#admin.site.register(yourmodel, yourmodeladmin)
1、首先使用有序字典替换原来的无序字典作为注册model的数据容器,并把已经存在的数据拷贝到新的有序字典里面。
2、装饰index view 和 app_index view这2个函数,修改templateresponse的返回值里面的context_data,按注册时的顺序重新排序。
3、之后安装正常的django admin register方式使用即可。
4、需要注意的地方,上述代码最好放在比较早运行的地方,比如settings.py 里面自己写的app里面的首个的admin.py文件中,否则在运行到这段代码之前已经注册的admin model是无序的。
分享到:
相关推荐
8. **性能优化**:Django源码中包含了许多性能优化技巧,例如缓存系统、数据库连接池等,这些都是提高应用性能的关键。 9. **国际化和本地化**:Django支持多语言,源码中有关于如何处理翻译字符串和时区转换的实现...
在源码中,这些部分分别在`django.db.models`、`django.views`、`django.template`和`django.urls`模块中体现。 **2. ORM(对象关系映射)** Django的ORM允许开发者用Python代码操作数据库,而不是SQL。在`django....
然而,我们可以通过创建自定义的`AdminModel`类来定制显示和操作。例如,我们可以为`Author`模型创建一个自定义的Admin类: ```python # admin.py class AuthorAdmin(admin.ModelAdmin): list_display = ['name', ...
【Django的资产管理系统源码】是一套使用Python的Django框架编写的简易资产管理软件教程。这个系统虽然规模不大,但包含了实现一个完整管理系统的必要组件,是学习Django开发的良好实践案例。该项目构建在Django 2.2...
在`admin.py`文件中,可以注册模型以使其在管理界面中显示。这在开发初期快速设置数据或者对数据进行调试非常方便。 7. 自定义中间件(Middleware): Django的中间件是插入到请求/响应处理流程中的轻量级组件。在...
文章中提到了将Django源码中的`change_form.html`复制到应用的`templates`目录下,并通过`change_form_template`指定这个自定义的模板文件。这样做可以让我们在模板中编写自己的HTML和JavaScript来实现三级联动的...
这个“Django源码包”包含了Django的核心组件和相关模块,是理解Django工作原理、进行二次开发或者优化性能的重要资源。 首先,我们来了解一下Django的主要组件: 1. **模型(Model)**:模型是Django中的数据模型...
**Django 源码分析** Django 是一个高级的 Python Web 开发框架,它遵循“DRY(Don't Repeat Yourself)”原则,旨在简化 Web 应用的开发过程。这个源码包提供了 Django 的核心代码,对于深入理解其工作原理、优化...
8. **管理后台(Admin)**:Django的内置管理后台可以让开发者轻松管理模型实例。通过简单的配置,可以快速为每个模型创建一个管理界面。 9. **静态文件和媒体文件**:项目中可能会包含CSS、JavaScript等静态文件,...
4. 模型(Model):在Django中,模型是数据库表的Python表示,用于定义数据结构和业务规则。例如,可能会有`Product`模型来存储商品信息,`Stock`模型来跟踪库存,`Order`模型来记录销售订单。 5. 视图(View):...
Django的admin组件是其内置的强大管理工具,用于快速构建基于Web的后台管理...在Django源码中,admin组件位于`django/contrib/admin`目录下,通过阅读源码,可以学习到如何扩展和定制admin以满足更多复杂场景的需求。
Django,一个高性能、简洁优雅的Python Web框架,以其MVT(Model-View-Template)设计模式著称,为开发者提供了强大的数据库操作、表单处理和URL调度等工具。在构建教务信息管理系统时,Django的核心优势在于其高效...
在本项目中,“Django+Web开发指南源码”是一个包含用于学习Django Web开发的实践教程源代码的压缩包。这个压缩包很可能是《Django+Web开发指南》这本书的配套代码,旨在帮助读者更好地理解和应用书中的理论知识。...
Django的admin应用提供了一个默认的后台管理系统,开发者可以在这里注册模型,方便对数据库中的数据进行增删改查操作。在矿山系统中,后台管理界面可能用于快速查看和修改矿山数据。 9. 性能优化: Django提供了...
1. **Django Model**:模型(Model)是Django中处理数据库数据的主要方式。在这个图书管理系统中,可能会有如`Book`、`Author`、`Publisher`等模型,它们定义了数据表的结构和业务规则。 2. **Django View**:视图...
通过以上步骤,你已成功创建了一个简单的Django应用,它能够从数据库中获取`Person`对象并显示在网页上。随着你对Django的理解加深,可以进一步学习表单处理、用户认证、中间件、缓存、管理后台等功能,从而构建更...
源码中会涉及到Django的模型(Model)、视图(View)、模板(Template)和URL(URLconf)的使用。 2. **Django模型**:在Django中,模型是数据库的抽象层,定义了数据字段和行为。源码中可能有.py文件,包含定义了...
【Django开发练习源码】是一个关于使用Python的Django框架进行Web应用开发的实践项目。这个项目旨在帮助初学者熟悉Django的快速开发流程,通过实际操作来掌握相关技能。配套的说明文档链接...
《基于Django的教务信息管理系统源码解析》 Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计。在这个基于Django的教务信息管理系统中,我们可以看到Django的强大功能如何被充分利用来构建高效...
【Python-Django搭建简单网站源码】:在Python的世界里,Django是一个强大的Web框架,它遵循模型-模板-视图(MTV)设计模式,用于快速开发安全且可维护的网站。本项目将深入探讨如何使用Django来构建一个简单的网站...