Django Admin – 禁用特定模型的“添加”操作

我有一个Django站点,有很多模型和表单。 我有很多自定义表单和表单集和内联表单集以及自定义validation和自定义查询集。 因此,添加模型的动作取决于需要其他东西的表单,而djangopipe理中的“添加模型”则通过自定义的查询集中的500来实现。

无论如何,禁用某些模型的“添加$模型”function?

我想要/admin/appname/modelname/add/给一个404(或适当的“走开”错误信息),我不希望“添加$ MODELNAME”button在/admin/appname/modelname视图上。

Djangopipe理员提供了一种禁用pipe理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions),但是该模型的唯一操作是“delete_selected”。 即pipe理员操作只对现有模型起作用。 有没有一些Django式的方式来做到这一点?

很简单,只需在Admin类中重载has_add_permission方法就可以了:

 class MyAdmin(admin.ModelAdmin): def has_add_permission(self, request): return False 

默认情况下,syncdb为每个模型创build3个安全权限:

  1. 创build(又名添加)
  2. 更改
  3. 删除

如果你以pipe理员的身份login,无论如何你都会得到一切

但是,如果您创build了一个名为“General Access”的新用户组 (例如),则只能为所有模型分配CHANGE和DELETE权限。

然后,任何作为该组成员的login用户都将不具有“创build”权限,屏幕上不会显示与其相关的任何内容。