Есть ли простой способ предоставить пользовательское действие администратора django без внесения изменений в модели? - PullRequest
0 голосов
/ 01 ноября 2009

У меня есть настраиваемое действие для модели Foo, все настроено и готово к работе, в комплекте с новым разрешением, которое я сделал.

Проблема в том, что моим администраторам нужно разрешение can_change_foo для просмотра списка изменений и выполнения этого пользовательского действия (которое я не хочу присваивать).

Есть ли более простой способ настроить это без переписывания представления администратора списка моделей?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2009

В итоге я переопределил метод changelist_view() в своем классе ModelAdmin, скопировал значения по умолчанию из django и просто закомментировал проверку разрешений. В списке (по крайней мере, как я его настроил) нет ссылок для редактирования отдельных объектов, и даже если он это сделал, django вызывает PermissionDenied, если вы пытаетесь редактировать отдельный объект. (поскольку я никогда не давал разрешения can_change).

Это взлом, и некоторые обезьяны, но пока нет отдельного разрешения на просмотр списка изменений, он работает довольно хорошо.

0 голосов
/ 01 ноября 2009

Есть ужасный хак, который я могу придумать ... Совершенно непроверенный, очевидно ...

Вы можете отключить все другие действия, переопределив get_actions(), и разрешить только свои действия. Тогда вы можете следовать предложению T.Stone здесь и полностью отключить ссылки для редактирования отдельных экземпляров модели. То, что это позволило бы вам сделать, это дать вашим пользователям разрешение can_change_foo, зная, что единственное действие, которое они смогут выполнить, было вашим.

Не очень ... Особенно часть о том, как не ссылаться на страницу редактирования ...

Плохо ли переписывать представление администратора списка? : -)

...