Интересным подходом для изменения формы редактирования является изменение только списка полей, доступных только для чтения.
Для этой цели используется только функция переопределения get_readonly_fields :
class MyModelAdmin(admin.ModelAdmin):
def get_readonly_fields(self, request, obj=None):
user = request.user
if user.is_superuser:
readonly = []
else:
readonly = ['field1']
return readonly
Относительно list_display современный подход к его изменению заключается в переопределении get_list_display :
Исходное определение просто возвращает self.list_display
:
class ModelAdmin:
def get_list_display(self, request):
"""
Return a sequence containing the fields to be displayed on the
changelist.
"""
return self.list_display
Так что вы можетепредоставить:
class MyModelAdmin(admin.ModelAdmin):
def get_list_display(self, request):
user = request.user
if user.is_superuser:
list_display = ['field1', 'field2']
else:
list_display = ['field1']
return list_display