2010-09-05 3 views

Répondre

2

Une façon hackish de le faire est d'écraser la variable list_display chaque fois que la vue changelist est appelé:

class MyModelAdmin(admin.ModelAdmin) 
    def changelist_view(self, request, extra_context=None): 
     user = request.user 
     if user.is_superuser: 
      self.list_display = ['field1', 'field2'] 
     else: 
      self.list_display = ['field1'] 
     return super(MyModelAdmin, self).changelist_view(request, extra_context=None) 

Mais régler la variable à chaque fois à la valeur désirée, car la même instance d'administration peut être appelée pour des requêtes faites par d'autres utilisateurs!

+0

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

1

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 
Questions connexes