Django Admin - 禁用特定模型的"添加"操作

Ror*_*ory 138 python django django-admin

我有一个拥有大量模型和表格的django网站.我有许多自定义表单和表单集以及内联表单集和自定义验证以及自定义查询集.因此,添加模型操作取决于需要其他内容的表单,以及django管理员中的"添加模型",通过自定义查询集中的500.

无论如何要禁用某些型号的"添加$ MODEL"功能?

我想/admin/appname/modelname/add/提供404(或合适的"消失"错误消息),我不希望"添加$ MODELNAME"按钮在/admin/appname/modelname视图中.

Django admin提供了一种禁用管理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions)但是此模型的唯一操作是"delete_selected".即管理操作仅对现有模型起作用.是否有一些django式的方式来做到这一点?

Fro*_*aka 321

这很容易,只是has_add_permissionAdmin班上的重载方法,如下:

class MyAdmin(admin.ModelAdmin):
     def has_add_permission(self, request, obj=None):
        return False
Run Code Online (Sandbox Code Playgroud)

  • 这不适合我."添加模型"按钮仍显示在模型的更改列表页面上. (6认同)
  • 适用于 Django 1.11。不需要`obj` 参数。 (4认同)
  • 2016年仍然适用于Django 1.9.谢谢! (2认同)
  • 不要忘记还注册 MyAdmin,例如:`admin.site.register(MyModel, MyModelAdmin)` 将所有内容添加到模型应用程序文件夹的 `admin.py` 中。 (2认同)

Ric*_*oke 8

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

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

如果您以管理员身份登录,无论如何都能获得一切.

但是,如果您创建一个名为"常规访问"的新用户组(例如),那么您只能为所有模型分配CHANGE和DELETE权限.

然后,作为该组成员的任何登录用户将没有"创建"权限,屏幕上将显示与其无关的任何内容.


San*_*aha 5

我认为这将对您有所帮助..下面的代码必须在admin.py文件中

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('name', )
    list_filter = ('name', )
    search_fields = ('name', )
    list_per_page = 20

    # This will help you to disbale add functionality
    def has_add_permission(self, request):
        return False

    # This will help you to disable delete functionaliyt
    def has_delete_permission(self, request, obj=None):
        return False
Run Code Online (Sandbox Code Playgroud)