Django管理员 - 使所有字段只读 [英] Django admin - make all fields readonly

查看:400
本文介绍了Django管理员 - 使所有字段只读的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



如下所示:

  class CustomAdmin(admin.ModelAdmin):
def get_readonly_fields(self,request,obj = None):
if request.user.is_superuser:
return self .readonly_fields

return self.fields

问题是 CustomAdmin.fields 此时不设置。



任何想法?

解决方案

小心,self.model._meta.fields不一定与CustomAdmin具有相同的字段!



所有字段管理员会更像这样:

 从django.contrib导入admin 
从django.contrib.admin。 utils import flatten_fieldsets

class CustomAdmin(admin.ModelAdmin):
def get_readonly_fields(self,request,obj = None):
如果request.user.is_superuser:
r eturn self.readonly_fields

如果self.declared_fieldsets:
return flatten_fieldsets(self.declared_fieldsets)
else:
返回列表(set(
[field。 self.opts.local_fields中的字段名称] +
[self.opts.local_many_to_many中的字段的field.name]
))


I'm trying to make all fields readonly without listing them explicitly.

Something like:

class CustomAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return self.readonly_fields

        return self.fields

The problem is CustomAdmin.fields is not set at this point.

Any ideas?

解决方案

Careful, self.model._meta.fields are not necessarily the same fields that CustomAdmin has!

"All fields of the Admin" would look more like this:

from django.contrib import admin
from django.contrib.admin.utils import flatten_fieldsets

class CustomAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return self.readonly_fields

        if self.declared_fieldsets:
            return flatten_fieldsets(self.declared_fieldsets)
        else:
            return list(set(
                [field.name for field in self.opts.local_fields] +
                [field.name for field in self.opts.local_many_to_many]
            ))

这篇关于Django管理员 - 使所有字段只读的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆