Django admin - 禁用特定模型的'添加'操作
我有一个使用Django的网站,里面有很多模型和表单。我创建了许多自定义表单、表单集和内联表单集,还有自定义的验证和查询集。因此,添加模型的操作依赖于一些需要其他东西的表单,而在Django后台添加模型时,由于自定义查询集的原因,出现了500错误。
有没有办法禁用某些模型的“添加$MODEL”功能呢?
我希望访问 /admin/appname/modelname/add/
时能返回404错误(或者合适的“请离开”错误信息),我不想在 /admin/appname/modelname
的视图中看到“添加$MODELNAME”这个按钮。
Django后台提供了一种禁用后台操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-actions),但是这个模型唯一的操作是“删除选中的”。也就是说,后台操作只针对已经存在的模型。有没有什么Django风格的方法可以做到这一点呢?
5 个回答
10
默认情况下,syncdb会为每个模型创建三种安全权限:
- 创建(也叫添加)
- 修改
- 删除
如果你以管理员身份登录,不管怎样,你都能获得所有权限。
但是,如果你创建一个新的用户组,比如叫"普通访问",那么你可以只给这个组分配修改和删除的权限,而不包括创建的权限。
这样,任何登录的用户只要是这个组的成员,就不会有“创建”权限,屏幕上也不会显示与之相关的内容。
37
我觉得这会对你有帮助……下面的代码应该放在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
除此之外,还有上面提到的内容。
# This will help you to disable change functionality
def has_change_permission(self, request, obj=None):
return False
445
这很简单,只需要在你的 Admin
类中重写 has_add_permission
方法,像这样:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False