Django Admin:限制人员进行更新

时间:2019-06-22 17:16:25

标签: django django-admin

我有一个Blog Model。所有新博客帖子的状态均为DRAFT

在管理员页面中,管理员将是Blog Model上的所有权限(CRUD)。我可以使用Django的register方法来解决这个问题。

我想要的是is_staff用户可以查看所有Blog Post但不能更新状态(例如,从DRAFTAPPROVE)。

有什么方法可以检查request的组,然后允许用户进行更新?谢谢。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是通过设置readonly_fields,将admin类中的status字段标记为只读:


from django.contrib import admin
from .models import BlogPost

@admin.register(BlogPost):
class BlogPostAdmin(admin.ModelAdmin):
    readonly_fields = ('status',)

请注意,这使得status对所有管理员用户都是只读的。如果您需要基于当前用户的更细粒度的控件,可以使用get_readonly_fields方法来覆盖。

此外,由于Django Admin的所有用户都拥有is_staff,因此我们将明确检查built-in permission to change a BlogPost

class BlogPostAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        # obj is None if we're creating a new BlogPost, or a BlogPost instance
        # if we are editing an existing BlogPost
        if not request.user.has_perm("your_app.change_blogpost"):
            return ("status",)
        return []