我想在我的Django管理面板中重新排序我的应用程序,我在SO中看到了另一个类似问题的回复,所以我去安装这个方法:django-modeladmin-reorder
我按照所有步骤操作,但它无法正常工作。这是我的实际Django面板
#settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
# Disable Django's own staticfiles handling in favour of WhiteNoise, for
# greater consistency between gunicorn and `./manage.py runserver`. See:
# http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'admin_reorder',
'organization_owners',
'panel',
'clients',
]
MIDDLEWARE_CLASSES = (
'admin_reorder.middleware.ModelAdminReorder',
)
ADMIN_REORDER = (
# Keep original label and models
'organization_owners',
'panel',
'clients',
)
也在我的requirements.txt
中Django==2.0.1
django-extensions==1.9.8
django-modeladmin-reorder==0.2
djangorestframework==3.7.7
flake8==3.5.0
答案 0 :(得分:2)
我已检查了他们的github repo,并在两个月前更新了支持Django 2.0,但它的Python Package Index version 0.2上次上传于2016-09-08。
因此, pip 安装仍有机会安装不支持Django 2.0的版本
请注意,urlresolvers模块在Django 1.10中已弃用,在2.0中已删除(django-modeladmin-reorder仍依赖于urlresolvers)
你能做什么:
如果您已经知道Django == 1.8,请先尝试django-modeladmin-reorder。
在项目的GitHub中使用他们的代码。这是最新提交的链接。 https://github.com/mishbahr/django-modeladmin-reorder/commit/f21929480c398c2628291d74af2f319421f651f3
答案 1 :(得分:2)
如果您正在使用Django 2.0,则必须使用Project download编辑middleware.py。甚至存储库都支持Django 2.0,pip正在停滞和旧版本(正如@Dhaval Savalia所说)。
之后,这一步:
将ModelAdminReorder添加到MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
...
'admin_reorder.middleware.ModelAdminReorder',
...
)
应替换为:
MIDDLEWARE = [
...
'admin_reorder.middleware.ModelAdminReorder',
...
]
这就是全部。
答案 2 :(得分:0)
我最近写了一篇关于这个的文章。它可能会有所帮助。 我们需要使用模板标签来重新排序应用和模型,如下所示。
from collections import OrderedDict
APP_ORDER = OrderedDict([
("app1", ["Model2", "Model1", "Model3"]),
("app2", ["Model2", "Model5", "Model3"]),
("app3", ["Model1", "Model6", "Model3"]),
])
from django import template
from django.conf import settings
register = template.Library()
def pop_and_get_app(apps, key, app_label):
for index, app in enumerate(apps):
if app[key] == app_label:
obj = apps.pop(index)
return obj
return None
@register.filter
def sort_apps(apps):
new_apps = []
order = settings.APP_ORDER
for app_label in order.keys():
obj = pop_and_get_app(apps, "app_label", app_label)
new_apps.append(obj) if obj else None
apps = new_apps + apps
for app in apps:
models = app.get("models")
app_label = app.get("app_label")
new_models = []
order_models = settings.APP_ORDER.get(app_label, [])
for model in order_models:
obj = pop_and_get_app(models, "object_name", model)
new_models.append(obj) if obj else None
models = new_models + models
app["models"] = models
return apps
{% for app in app_list|sort_apps %}
参考:https://learnbatta.com/blog/how-to-re-order-apps-models-django/