В development version подобная функциональность вынесена в «интерфейс» и задокументирована, но сайт, для которого нужно было расширить функциональность интерфейса администратора постоен на Django 1.0, в котором этой возможности ещё нет…
Суть расширения интерфейса (добавления действия) заключается в реализации метода __call__(self, request, url) в классе администрирования модели.
Я сделал это следующим образом:
Т.е. я проверяю вначале URL на наличие префикса моего действия и вызываю соответствующее представление, или передаю управление родительской реализации.
import_view у меня служит для импорта (с ручной обработкой) объекта с заданным идентификатором (т.е. это по суте add, но со своей спецификой), поэтому и его реализацию я содрал с change_view :-) Всё оказалось очень просто и логично. Права на совершения действия проверяются из самого представления действия. Я оставил их такими же как и у исходного действия add.
Надеюсь кому-нибудь пригодится :-)
Суть расширения интерфейса (добавления действия) заключается в реализации метода __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.
Надеюсь кому-нибудь пригодится :-)