django - 除了超级用户,如何使字段在 django admin 中只读?
问题描述
我定义了以下模型:
class PRegistration(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
create_date = models.DateTimeField(auto_now=False, auto_now_add=True)
teamName = models.CharField(max_length=144)
city = models.CharField(max_length=144)
对于除超级用户之外的所有员工帐户,如何使所有这些字段在管理页面中只读?我想在不一一指定字段的情况下执行此操作,以便我可以在多个地方重用代码。
解决方案
在 admin.py 中创建的 ModelAdmin 子类中添加以下函数。get_read_only 函数返回一个列表或元组,它告诉将要设置为只读的字段。在以下代码中,非超级用户员工帐户将所有字段视为只读,而超级用户将能够编辑所有这些字段。
def get_readonly_fields(self, request, obj=None):
if request.user.is_staff:
if request.user.is_superuser:
return []
else:
return [f.name for f in self.model._meta.fields]
特别感谢:这个问题及其答案
推荐阅读
- snakeyaml - 每个条目的 Snake Yaml 跳线
- linux - 无法使用 HTTPS 连接,但 HTTP 工作正常
- python - LabelEncoder - 适合元组列表 - y 应该是一维数组
- windows-10 - 我想使用 forfiles 自动删除旧文件
- sql - 如何计算列的每个值所在的百分位数?(火花 SQL)
- smtp - 外发电子邮件卡在队列文件夹中
- sql - 通过触发器从inserted.id 创建一个字符串
- lua - Lua 生成点随机
- node.js - 如何正确地从 node.js 项目的根文件夹中进行 eslint
- php - 如何从 URL 接收 GET 请求