class MyModelAdmin(admin.ModelAdmin):
my_filter = {1: ('field1', 'field2'), 2: ('field3', 'field4')}
def get_fields(self, request, obj=None):
fields = super().get_fields(request, obj)
if obj is None:
return fields
return [f for f in fields if f not in self.my_filter[obj.my_type]]
Но это будет работать только при изменении объекта.
Если нужно динамически при создании, то тут только js, ловишь изменение поля my_type и скрываешь/показываешь необходимые поля.
class MyModelAdmin(admin.ModelAdmin):
class Media:
js = (
'js/my_fields_filter.js',
)