Настройка админки django. Проблема с представлениями без модели

Я пытаюсь создать дополнительное представление в админке django, на левой панели навигации. Это представление будет отвечать за загрузку файла, который будет анализироваться в некоторой функции (в будущем я хотел бы отображать результат этого парсинга на странице админки). Этот файл не будет сохранен в базе данных, поэтому модели не будет. Есть ли возможность добавить представление в django admin (левая панель навигации), у которого нет модели? Я много читал, но так и не смог найти решение. Что я сделал на данный момент:

  1. Создал класс, который наследуется от AdminSite. Я попытался реализовать метод get_app_list, но переменная self._build_app_dict(request) оказалась пустым массивом, а это значит, что метод не смог найти установленные aps. Я хотел добавить новый объект в переменную app_list, чтобы отобразить его на сайте.
  2. Пытался переопределить шаблоны админки, но не смог их отобразить. Я пытался переопределить app_index.html, который я положил в папку: app_name/templates/admin/app_index.html
  3. .

Вот мой код, который, конечно же, не работает:

class MyCustomAdmin(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)
        breakpoint()
        app_list = sorted(app_dict.values(), key=lambda x: x['name'].lower())

        for app in app_list:
            app['models'].sort(key=lambda x: x['name'])

        return app_list

    def get_urls(self):
        from django.conf.urls import url

        urls = super(MyCustomAdmin, self).get_urls()
        urls += [
            url(r'^my_custom_view/$', self.admin_view(MyCustomView.as_view()))
        ]
        return urls


class MyCustomView(View):
    template_name = 'admin/app_index.html'

    def get(self, request):
        print('fefef')

        return render(request, self.template_name, {})

    def post(self, request):
        pass


admin_site = MyCustomAdmin()
admin_site.get_app_list(AdminSite.get_app_list)
Вернуться на верх