'Options' object has no attribute 'get_all_field_names'

django, django-admin, python, python-2.7

Solution

It is probably because you are using django 1.10. `get_all_field_names` was deleted in this version. Use `get_fields`

def get_readonly_fields(self, request, obj=None):
    return [f.name for f in self.model._meta.get_fields()]

Or for full compatible version

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)
    )))

Problem

In my `django-admin`, I am trying to make a `model` non-editable. So, I am `overriding` a method `get_readonly_fields` of `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() ``` But I am facing an error. I am pasting the error here. ``` 'Options' object has no attribute 'get_all_field_names' ``` Any Idea why ?

Original source