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