Hide Inline form in Django Hide Inline form in Django django django

Hide Inline form in Django


You can use ModelAdmin get_inline_instances function.Following code removes inlines from add_view:

from django.contrib import adminfrom models import FooModelclass FooInline(admin.StackedInline):    model = FooModelclass MyModelAdmin(admin.ModelAdmin):    inlines = [FooInline]    def get_inline_instances(self, request, obj=None):        return obj and super(MyModelAdmin, self).get_inline_instances(request, obj) or []


ModelAdmin.__init__() takes the classes in ModelAdmin.inlines, instantiates them, and stores the results in ModelAdmin.inline_instances. You can set ModelAdmin.inline_instances to an empty list after __init__ to remove the inlines.

See line 243 of django/contrib/admin/options.py


I solved this by putting the logic to set self.inline_instances = [] in the get_readonly_fields(self, request, obj=None) method.

For example, if you wanted to show the inlines to superusers but not to anyone else:

def get_readonly_fields(self, request, obj=None):    if request.user.is_superuser:        return ()    else:        self.inline_instances = []        return ()