Adi*_*lik 7 python django django-admin python-2.7
在我django-admin,我试图做一个model不可编辑的.
所以,我overriding的方法get_readonly_fields的admin.ModelAdmin.
Here is my Code
@admin.register(SMSTemplate)
class SMSTemplateAdmin(admin.ModelAdmin):
list_display=['title', 'json', 'note']
formfield_overrides = {
JSONField: {'widget': PrettyJSONWidget }
}
def has_delete_permission(self, request, obj=None):
return False
def get_readonly_fields(self, request, obj=None):
return self.model._meta.get_all_field_names()
Run Code Online (Sandbox Code Playgroud)
但我面临一个错误.我在这里粘贴错误.
'Options' object has no attribute 'get_all_field_names'
Run Code Online (Sandbox Code Playgroud)
任何想法为什么?
Sar*_*iev 18
这可能是因为你使用的是django 1.10.get_all_field_names 已在此版本中删除.使用get_fields
def get_readonly_fields(self, request, obj=None):
return [f.name for f in self.model._meta.get_fields()]
Run Code Online (Sandbox Code Playgroud)
或者完全兼容的版本
from itertools import chain
def get_readonly_fields(self, request, obj=None):
return list(set(chain.from_iterable(
(field.name, field.attname) if hasattr(field, 'attname') else (field.name,)
for field in self.model._meta.get_fields()
# For complete backwards compatibility, you may want to exclude
# GenericForeignKey from the results.
if not (field.many_to_one and field.related_model is None)
)))
Run Code Online (Sandbox Code Playgroud)