Django文档表明,在Django 2.1中添加了新的View Permission,但没有进一步说明如何在Django Admin网站上使用它。
据我理解,这将是一种只读权限,但我会很感激任何对此新权限及其在管理网站上的行为有更好理解的人提供更多的解释。
Django文档表明,在Django 2.1中添加了新的View Permission,但没有进一步说明如何在Django Admin网站上使用它。
据我理解,这将是一种只读权限,但我会很感激任何对此新权限及其在管理网站上的行为有更好理解的人提供更多的解释。
你是正确的。 Django 2.1 发布说明 描述了这个变化:
模型“查看”权限
在模型
Meta.default_permissions
中添加了“查看”权限。 运行迁移时,将自动创建新权限。这允许给用户只读访问管理员中的模型。
ModelAdmin.has_view_permission()
是新的。该实现向后兼容,因为没有必要分配“查看”权限以允许具有“更改”权限的用户编辑对象。
此外,ModelAdmin.has_view_permission
[Django-doc] 权限文档也对其进行了解释:
ModelAdmin.has_view_permission(request, obj=None)
如果允许查看
obj
,则返回True
,否则返回False
。如果obj
是None
,则应返回True
或False
,以指示是否允许查看此类型的对象(例如,False
将被解释为当前用户不允许查看此类型的任何对象)。默认实现会在用户具有“更改”或“查看”权限时返回
True
。
因此,在这种情况下,“更改”权限意味着“查看”权限(这是相当合理的,因为在查看之前更改对象会很奇怪)。
你说得对,他们没有明确说明如何使用它,但我找到了如何使用它的方法。默认情况下,视图权限将返回 true,因此它的唯一用例是如果您想防止用户查看管理员对象。以下是如何实现。
class ViewAdmin(admin.ModelAdmin):
def has_view_permission(self, request, obj=None):
return False