django - Django Admin:限制员工更新
问题描述
我有一个Blog Model
. 所有新的博客文章都有DRAFT
状态。
在管理页面中,admin 将是Blog Model
. 我可以通过使用 Django 的register
方法来解决这个问题。
我想要的是is_staff
用户可以查看所有Blog Post
但不能更新状态(例如从DRAFT
到APPROVE
)。
有没有办法检查request
's 组,然后允许用户更新或不更新?谢谢。
解决方案
最简单的解决方案是在管理类中将该字段标记status
为只读,方法是readonly_fields
:
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
,我们将明确检查内置权限以更改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 []
推荐阅读
- java - 在循环中打印出梯子的对面
- node.js - 错误状态:平台不允许使用不安全的 HTTP:
- python - How do I rotate a PyTorch image tensor around it's center in a way that supports autograd?
- r - na.rm 不工作,无法计算平均值
- javascript - 如何使两个元素在同一个类中可拖动
- redux - 为什么我的方法不起作用?反应还原
- autodesk-forge - 使用 Forge API 翻译后,无法在 Autodesk Viewer 上显示翻译后的 .zip 文件
- php - 如何确定一个 php 对象是否代表一个顺序数组而不是关联字典?
- python - 如何使用 numba 在 GPU 上泛化快速矩阵乘法
- flutter - Json解码转换为List
而不是地图