How to add readonly inline on django admin How to add readonly inline on django admin django django

How to add readonly inline on django admin


After a while of trying to find the name I figured out thanks to this answer, so I checked the names at self.opts.local_fields and found the name of the middle table and added it to readonly_fields, setting can_delete to False.

class SummaryInline(admin.TabularInline):    model = ParserError.summaries.through    readonly_fields = ('myclasssummary',)    can_delete = False

pretty simple but took me a while so I figured out it was a good idea to add it here.


Additionally, if you do not want the ability to add/delete the rows, you can add these definitions.

def has_add_permission(self, request, obj=None):    return Falsedef has_delete_permission(self, request, obj=None):    return False


You can make the entire inline readonly by adding:

class UnitsInline(admin.TabularInline):    def has_change_permission(self, request, obj=None):        return False

This will prevent anyone from editing the entry from the admin.

Another example that prevents, adding, deletion and displays all the inline fields as readonly:

class ReadOnlyInline(admin.TabularInline):    def has_change_permission(self, request, obj=None):        return False    def has_add_permission(self, request, obj=None):        return False    def has_delete_permission(self, request, obj=None):        return False    def get_readonly_fields(self, request, obj=None):        return list(super().get_fields(request, obj))