我有一个Blog Model
。所有新博客帖子的状态均为DRAFT
。
在管理员页面中,管理员将是Blog Model
上的所有权限(CRUD)。我可以使用Django的register
方法来解决这个问题。
我想要的是is_staff
用户可以查看所有Blog Post
但不能更新状态(例如,从DRAFT
到APPROVE
)。
有什么方法可以检查request
的组,然后允许用户进行更新?谢谢。
答案 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 []