JawsIk
@JawsIk
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)

Как сделать нужный порядок при отображении моделей в админке Django?

В моём файле admin.py идёт следующий порядок
admin.site.register(TypeProfile) # Вид профиля
admin.site.register(TypeFacade)  # Вид фасадов
admin.site.register(Price)       # Формирование цен
admin.site.register(PaintColor)  # Цвет ЛКМ
admin.site.register(PatinaColor) # Патина
admin.site.register(Materials)   # Материалы
admin.site.register(Category)    # Категории
admin.site.register(Products)    # Изделия

А в админке всё остортировано по алфавиту:
Виды профиля
Виды фасадов
Изделия
Категории
Материалы (исполнение)
Патина
Формирование цен
Цвет ЛКМ

Как сделать, чтобы отображение моделей шло именно в том порядке, который я указал в admin.py?
  • Вопрос задан
  • 2946 просмотров
Решения вопроса 1
JawsIk
@JawsIk Автор вопроса
Python Django, Lua, ЧПУ-станки(ArtCam, Aspire)
В общем нашёл я функцию сортировки. Сортирует она в функции get_app_list класса AdminSite. Затем по указанию Pavel Denisov стал искать способы решения. Находил разные варианты, поэтому объединив получил следующий вариант. Все манипуляции происходят в файле admin.py.
Тут сразу хочется сделать некое отступление, что при переназначении регистрации, из админки пропадают Пользователи и группы и поэтому их нужно туда зарегистрировать самостоятельно. Но обо всём по порядку.

1. Делаем необходимый импорт:
from django.contrib.admin import AdminSite
from django.contrib.auth.models import Group, User
from django.contrib.auth.admin import GroupAdmin, UserAdmin

2. Определяем свой класс, наследуясь от AdminSite и в нём переписываем функцию. (в моём случае я просто закомментировал цикл сортировки):
class MyAdminSite(AdminSite):

    def get_app_list(self, request):
        """
        Return a sorted list of all the installed apps that have been
        registered in this site.
        """
        app_dict = self._build_app_dict(request)

        # Sort the apps alphabetically.
        app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())

        # Sort the models alphabetically within each app.
        #for app in app_list:
        #    app['models'].sort(key=lambda x: x['name'])

        return app_list


3. Подменяем admin.site своим собственным:
admin.site = MyAdminSite()

4. Регистрируем своим модели:
# Register your models here.
admin.site.register(TypeProfile)
admin.site.register(TypeFacade) 
admin.site.register(Price)
admin.site.register(PaintColor)
admin.site.register(PatinaColor)
admin.site.register(Materials)
admin.site.register(Category)
admin.site.register(Products)

5. Регистрируем стандартные модели:
#Регистрируем стандартные
admin.site.register(Group, GroupAdmin)
admin.site.register(User, UserAdmin)


И всё работает как надо.
Всем спасибо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы