我想在我的Django管理界面中订购模型。默认情况下,应用程序中的模型按字母顺序排列。
我想避免创建额外的软件包等,或不得不改变Django本身。
这可以通过覆盖Django管理模板或其他轻量级方式来实现吗?
编辑:
我不想订购最后的物品,像一张待办事项清单。
我想在管理的索引页面中订购不同型号的。例如,todos出现在cars之前。
发布于 2012-12-23 07:39:09
您可以重写模板并添加模板以进行排序。这里有一个片段,它可能需要一些修改,http://djangosnippets.org/snippets/1939/
发布于 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
也许,如果您想按照注册的顺序显示模型,您可以在该方法中取出排序行。
发布于 2015-10-26 16:39:08
我要留下一个不太好的答案。
在django/cont肋骨/admin/sites.py中的第448行对模型进行排序。
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索引页中设置模型的顺序。
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 ...
并将该类型替换为以下内容:
450 app['models'].sort(key=lambda x: x['order'])
https://stackoverflow.com/questions/14008892
复制相似问题