В 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.
Надеюсь кому-нибудь пригодится :-)
