'Options'对象没有属性'get_all_field_names'

Adi*_*lik 7 python django django-admin python-2.7

在我django-admin,我试图做一个model不可编辑的.

所以,我overriding的方法get_readonly_fieldsadmin.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)