Pull to refresh

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

Reading time1 min
Views1.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.

Надеюсь кому-нибудь пригодится :-)
Tags:
Hubs:
+5
Comments4

Articles