Django管理员 - 使所有字段只读 [英] Django admin - make all fields readonly
本文介绍了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屋!
查看全文