Как стать автором
Обновить

Добавление «custom action» к интерфейсу администрирования модели в Django

Время на прочтение1 мин
Количество просмотров1.2K
В development version подобная функциональность вынесена в «интерфейс» и задокументирована, но сайт, для которого нужно было расширить функциональность интерфейса администратора постоен на Django 1.0, в котором этой возможности ещё нет…

Суть расширения интерфейса (добавления действия) заключается в реализации метода __call__(self, request, url) в классе администрирования модели.
Я сделал это следующим образом:
class EventAdmin(admin.ModelAdmin):
    save_as = True

    def __call__(self, request, url):
        print url
        if url is not None and url.startswith('import/'):
            return self.import_view(request, unquote(url[7:]))
        else:
            return super(EventAdmin, self).__call__(request, url)

Т.е. я проверяю вначале URL на наличие префикса моего действия и вызываю соответствующее представление, или передаю управление родительской реализации.

import_view у меня служит для импорта (с ручной обработкой) объекта с заданным идентификатором (т.е. это по суте add, но со своей спецификой), поэтому и его реализацию я содрал с change_view :-) Всё оказалось очень просто и логично. Права на совершения действия проверяются из самого представления действия. Я оставил их такими же как и у исходного действия add.

Надеюсь кому-нибудь пригодится :-)
Теги:
Хабы:
Всего голосов 11: ↑8 и ↓3+5
Комментарии4

Публикации

Истории

Работа

Python разработчик
131 вакансия

Ближайшие события

Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область