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

NKS*_*NKS 5 django django-models 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)
Run Code Online (Sandbox Code Playgroud)

如何使除超级用户之外的所有员工帐户的所有这些字段在管理页面中只读?我想在不一一指定字段的情况下执行此操作,以便我可以在多个位置重用代码。

NKS*_*NKS 10

在您在 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]
Run Code Online (Sandbox Code Playgroud)

特别感谢:这个问题及其答案