Une approche intéressante pour modifier le formulaire d'édition consiste à modifier uniquement la liste des champs en lecture seule.
A cet effet, la seule fonction override 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
En ce qui concerne list_display approche moderne de la modifier est de redéfinir get_list_display:
définition originale retourne juste 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
Vous pouvez fournir:
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
désolé fait une erreur dans ma question, je voulais vraiment dire 'fields' au lieu de 'list_display', mais votre suggestion devrait toujours s'appliquer – zer0stimulus