Пользовательская страница администратора Django теряет URLS

Я пытаюсь создать кастомизированный django-admin, с отдельной страницей, на которую ссылаются в app_list.

Я использовал https://stackoverflow.com/a/70446680 в качестве основы и могу получить пользовательскую страницу администратора. Однако, когда я возвращаюсь на главную страницу администратора, все приложения в списке app_list пропадают, кроме пользовательского.

Я могу исправить это, установив admin_urls = admin.site.get_urls(), но когда я это делаю, мой пользовательский сайт администратора больше не имеет определенного метода get_app_list (из https://stackoverflow.com/a/56476261), поэтому мой app_list в администраторе не показывает приложение 'tcptraceroute'.

from django.contrib.admin import AdminSite

class CustomAdminSite(AdminSite):

    def get_urls(self):
        admin_urls = super().get_urls() 
        print(admin_urls)
        custom_urls = [
            path('preferences/', views.my_view()),
        ]
        return custom_urls + admin_urls # custom urls must be at the beginning

    def get(self):
        request.current_app == self.name
        return super().get(request)

    def get_app_list(self, request):
        app_list = super().get_app_list(request)
        app_list += [
            {
                "name": "My Custom App",
                "app_label": "my_test_app",
                # "app_url": "/admin/test_view",
                "models": [
                    {
                        "name": "tcptraceroute",
                        "object_name": tcptraceroute,
                        "admin_url": "/admin/test_view",
                        "view_only": True,
                    }
                ],
            }
        ]
        return app_list

site = CustomAdminSite()

Я попробовал изменить порядок приложений в установленных приложениях, а также урлы, которые в настоящее время загружают сайт customadmin следующим образом:

path('admin/', custom_admin.site.urls),

Похоже, что определенный в настоящее время класс admin site недоступен через метод super() в подклассе. И когда я вызываю admin.site.get_urls() в подклассе, суперкласс больше не имеет метода get_app_list.

?

MTIA.

Я обнаружил, что если я установлю реестр пользовательского класса admin в реестр admin.site, то он будет работать, как ожидалось.

Код становится...

class CustomAdminSite(admin.AdminSite):

    def __init__(self):
        super().__init__()
        self._registry = admin.site._registry
    
    def get_urls(self):
        admin_urls = super().get_urls()
        custom_urls = [
            path('preferences/', views.MyView.as_view(), name="preferences"),
        ]
        return custom_urls + admin_urls # custom urls must be at the beginning

    def get(self):
        request.current_app == self.name
        return super().get(request)

    def get_app_list(self, request):
        app_list = super().get_app_list(request)
        app_list += [
            {
                "name": "My Custom App",
                "app_label": "my_test_app",
                # "app_url": "/admin/test_view",
                "models": [
                    {
                        "name": "tcptraceroute",
                        "object_name": tcptraceroute,
                        "admin_url": "/admin/test_view",
                        "view_only": True,
                    }
                ],
            }
        ]
        return app_list

site = CustomAdminSite()
Вернуться на верх