Изменение порядка объектов модели в панели администратора django
У меня есть несколько объектов конфигурации в панели администратора django
. Они перечислены в следующем порядке
- Настройка электронной почты
- Общая конфигурация
- Сетевая конфигурация
Каждый объект может быть настроен отдельно, но все они включены в General config
. Так что в основном вам понадобится в основном General config
, поэтому я хочу переместить ее на верх. Я знаю, как упорядочить поля в самой модели, но как изменить порядок моделей?
Ответы
Ответ 1
Я не вижу в этом очевидного решения - модели сортируются по их _meta.verbose_name_plural, и это происходит внутри представления AdminSite.index, без видимого места для перехвата пользовательского кода, без подкласса класса AdminSite и предоставления собственных индексный метод, который, однако, является огромным монолитным методом, очень наследуемым - недружественным.
Ответ 2
Поэтому я только что написал пакет django, который позволит вам переупорядочить ярлык приложения и список имен django app/rename (включая сторонние приложения) - вы можете скачать его здесь:
https://github.com/mishbahr/django-modeladmin-reorder
Ответ 3
Если вы не против использовать грязный трюк, добавьте verbose_name_plural
ваших моделей с определенным количеством невидимых пробелов нулевой ширины. Например, добавьте "Конфигурация электронной почты" с 1 пробелом нулевой ширины, "Общая конфигурация" с 2 и "Конфигурация сети" с 3. Это действительно самый простой метод, и я еще не нашел недостатков.
Ответ 4
Я нашел этот фрагмент для переупорядочения моделей в панели администратора django - он работает для нас (хотя ознакомьтесь с комментариями ниже фрагмента для обновлений, чтобы он работал с Django> = 1.4)
И в долгосрочной перспективе есть отчет об ошибке django об упорядочении моделей в приложениях. Отчет об ошибке открыт на момент написания ответа.
Ответ 5
Если вы просто хотите изменить порядок своих приложений (тестирование с помощью Django 1.11.10
).
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)