除超级用户外,如何使字段只在django admin中读取?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了除超级用户外,如何使字段只在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]

特别感谢:this question and its answers

以上是关于除超级用户外,如何使字段只在django admin中读取?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django rest 中自动继承外键模型的字段?

提交后如何使表单域为空

Django用户模型电子邮件字段:如何使其成为强制性

如何在 Django 中向 ModelForm 添加外键字段?

Django:创建电子邮件登录字段而不是用户名后,超级用户和用户无法登录到管理员和用户页面

我怎样才能使一个字段只在某些条件下是必需的?