Bugfix: On ne pouvait plus éditer les chercheurs dont le nom ne commençaient pas
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / chercheurs / admin.py
index ea2d497..6635881 100644 (file)
@@ -12,15 +12,15 @@ from chercheurs.models import Chercheur, Publication, Groupe, ChercheurGroupe, C
 
 class ChercheurAdmin(admin.ModelAdmin):
     list_filter = ['genre']
-    list_per_page = 25
+    list_per_page = 9999
     actions = ('remove_from_group', 'export_as_ods', 'export_as_csv')
     search_fields = ('nom', 'prenom')
 
-    def lookup_allowed(self, lookup):
+    def lookup_allowed(self, lookup, value):
         return lookup in ['genre', 'statut', 'membre_reseau_institutionnel', 
                           'membre_instance_auf', 'discipline', 'region', 'pays', 
-                          'groupes'] or \
-               admin.ModelAdmin.lookup_allowed(self, lookup)
+                          'groupes', 'nord_sud', 'initial'] or \
+               admin.ModelAdmin.lookup_allowed(self, lookup, value)
 
     def remove_from_group(self, request, queryset):
         groupe_id = request.GET.get('groupes__id__exact')
@@ -46,6 +46,21 @@ class ChercheurAdmin(admin.ModelAdmin):
     def queryset(self, request):
         return ChercheurAdminQuerySet(Chercheur)
 
+    def get_object(self, request, object_id):
+        """On doit réimplémenter cette méthode à cause de ce qu'on fait avec "initial" dans la méthode queryset()."""
+        try:
+            return Chercheur.objects.get(id=object_id)
+        except Chercheur.DoesNotExist:
+            return None
+
+    def changelist_view(self, request, extra_context=None):
+        initials = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+        current_initial = request.GET.get('initial', 'A')
+        return super(ChercheurAdmin, self).changelist_view(request, extra_context={
+            'initials': initials,
+            'current_initial': current_initial
+        })
+
     def export(self, queryset, type):
         if queryset.count() == 0:
             return None
@@ -128,14 +143,21 @@ class ChercheurAdminQuerySet(ChercheurQuerySet):
            
         C'est la seule façon que j'ai trouvée de contourner les mécanismes
         de recherche de l'admin."""
-        qs = self
         pays = kwargs.pop('pays', None)
         region = kwargs.pop('region', None)
+        nord_sud = kwargs.pop('nord_sud', None)
         expert = kwargs.pop('expert', None)
+        initial = kwargs.pop('initial', 'A')
+        qs = super(ChercheurAdminQuerySet, self).filter(nom__istartswith=initial)
         if pays is not None:
-            qs = qs.filter(Q(etablissement__pays=pays) | (Q(etablissement=None) & Q(etablissement_autre_pays=pays)))
+            qs = qs.filter(Q(etablissement__pays=pays) | 
+                           (Q(etablissement=None) & Q(etablissement_autre_pays=pays)))
         elif region is not None:
-            qs = qs.filter(Q(etablissement__pays__region=region) | (Q(etablissement=None) & Q(etablissement_autre_pays__region=region)))
+            qs = qs.filter(Q(etablissement__pays__region=region) | 
+                           (Q(etablissement=None) & Q(etablissement_autre_pays__region=region)))
+        elif nord_sud is not None:
+            qs = qs.filter(Q(etablissement__pays__nord_sud=nord_sud) | 
+                           (Q(etablissement=None) & Q(etablissement_autre_pays__nord_sud=nord_sud)))
         if expert is not None:
             if expert in ['1', 1, True]:
                 qs = qs.exclude(expertises=None)