I\'m trying to make all fields readonly without listing them explicitly.
Something like:
class CustomAdmin(admin.ModelAdmin):
def get_readonly_fi
@admin.register(Hero)
class HeroAdmin(admin.ModelAdmin, ExportCsvMixin):
...
readonly_fields = ["father", "mother", "spouse"]
reference : https://books.agiliq.com/projects/django-admin-cookbook/en/latest/changeview_readonly.html
With get_fieldsets you get all fields from the form
def get_readonly_fields(self, request, obj=None):
readonly = []
for fs in self.get_fieldsets(request, obj):
if len(fs) > 1:
readonly += fs[1].get('fields', [])
return readonly
This worked for me with Django 1.10
def get_readonly_fields(self, request, obj=None):
if request.user.is_superuser:
return self.readonly_fields
return list(set(
[field.name for field in self.opts.local_fields] +
[field.name for field in self.opts.local_many_to_many]
))