2012-05-02 3 views
1

Ma question est juste une extension de ce fil [Question] http://stackoverflow.com/questions/851636/default-filter-in-django-admin.Filtre de liste django-admin par défaut

from myproject.myapp.mymodels import fieldC 


class Poll(models.Model): 

    fieldA = models.CharField(max_length=80, choices=CHOICES.MyCHOICES) 
    fieldB = models.ForeignKey(fieldC) 

admin.py 

list_display = ('fieldB__fieldc1') 

Now my list filter shows four criteria All, A ,B ,C . 

Ce que je veux est de savoir si le super-utilisateur est connecté, le filtre doit montrer tous les quatre critères Tous, A, B, C et si l'utilisateur est autre que le filtre ne doit montrer super-utilisateur Tout, A, B.

Comment puis-je obtenir ceci? Voici mon vrai morceau de admin.py

def changelist_view(self, request, extra_context=None): 

     referer = request.META.get('HTTP_REFERER', '') 
     test = referer.split(request.META['PATH_INFO']) 
     if test[-1] and not test[-1].startswith('?'): 
      if not request.GET.has_key('patient__patient_type__exact'): 

       q = request.GET.copy() 
       q['patient__patient_type__exact'] = 'Real' 
       request.GET = q 
       request.META['QUERY_STRING'] = request.GET.urlencode() 
       if not request.user.is_superuser: 
        q['patient__patient_type__exact'] = 'Real' 
    return super(VisitAdmin, self).changelist_view(request, extra_context) 


Thanks in advance 
+0

Je suis confus si vous essayez de faire un * filtre par défaut * différent pour l'utilisateur et su, ou un * ensemble différent de jeux de filtres * pour l'utilisateur et su? –

+0

J'utilise le même filtre pour les superutilisateurs et les autres utilisateurs. Je veux juste que lorsque superutilisateur se connecte, il devrait voir tous les choix comme "Réel", "Test" et "Invité" dans le filtre_liste et il devrait être capable de filtrer les lignes de cette table mais si l'utilisateur n'est pas superutilisateur, le filtre ne devrait afficher que les choix "Réel" et "Invité" dans le list_filter et il ne devrait pouvoir filtrer les lignes que pour les choix "Réel" et "Invité". –

Répondre

0

Je pense que la nouvelle API FilterSpec dans Django 1.4 vous donne exactement ce dont vous avez besoin ici. Check out the docs sur list_filter. Dans 1.4, vous pouvez maintenant créer des filtres de liste personnalisés qui sous-classent django.contrib.admin.SimpleListFilter et vous donner le pouvoir d'écrire du code de recherche personnalisée et de requête, et comme la requête est passée, vous pouvez faire un simple conditionnel avec is_superuser. Lisez attentivement l'exemple de code dans les documents et je pense que tout sera clair.

Questions connexes