Python ';选项';对象没有属性';获取所有字段名称';
在我的Python ';选项';对象没有属性';获取所有字段名称';,python,django,python-2.7,django-admin,Python,Django,Python 2.7,Django Admin,在我的django管理员中,我试图使模型不可编辑 因此,我正在覆盖admin.ModelAdmin的获取只读字段的方法 这是我的代码 @admin.register(SMSTemplate) class SMSTemplateAdmin(admin.ModelAdmin): list_display=['title', 'json', 'note'] formfield_overrides = { JSONField: {'widget': PrettyJSO
django管理员
中,我试图使模型
不可编辑
因此,我正在覆盖admin.ModelAdmin
的获取只读字段的方法
这是我的代码
@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()
但我面临一个错误。我在这里粘贴错误
'Options' object has no attribute 'get_all_field_names'
知道为什么吗?可能是因为您使用的是django 1.10<在此版本中,代码>获取所有字段名称
。使用get\u字段
def get_readonly_fields(self, request, obj=None):
return [f.name for f in self.model._meta.get_fields()]
或用于完全兼容的版本
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)
)))
我收到此错误-->类型错误:hasattr():属性名称必须为string@AdilMalik你是抄袭了我的答案还是只是用它作为例子?。因为这段代码是从文档中提取出来的,并且可以正常工作。告诉我你哪里出了这个问题?