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