是否有一种简单的方法来提供自定义django管理操作而不允许更改模型?

时间:2009-11-01 03:38:22

标签: django django-admin

我对模型Foo进行了自定义操作所有设置并准备就绪,完成了我所做的新许可。

问题是,我的管理员需要can_change_foo权限才能查看更改列表并执行该自定义操作(我不想奖励)。

有没有更简单的方法来设置它而不重写模型列表管理视图?

2 个答案:

答案 0 :(得分:0)

有一个可怕的黑客,我能想到......完全未经测试,显然......

您可以通过覆盖get_actions()来禁用所有其他操作,并且只允许自定义操作。然后你可以follow T.Stone's suggestion here并完全禁用链接来编辑模型的各个实例。允许您这样做的是为您的用户提供can_change_foo权限,因为他们知道他们能够执行的唯一操作就是您的。

不漂亮......尤其是关于不链接到编辑页面的部分......

是否重写了列表管理视图那么糟糕? : - )

答案 1 :(得分:0)

我最终覆盖了ModelAdmin类的changelist_view()方法,从django复制了默认值,只是注释掉了权限检查。列表(至少我配置它的方式)没有编辑单个对象的链接,即使它确实如此,如果您尝试编辑单个对象,django会引发PermissionDenied。 (因为我从未授予can_change权限)。

这是一个黑客攻击和一些monkeypatching,但在获得查看更改列表的单独权限之前,它的效果非常好。