order by moyenne
authorOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 20 Mar 2012 17:57:48 +0000 (13:57 -0400)
committerOlivier Larchevêque <olivier.larcheveque@auf.org>
Tue, 20 Mar 2012 17:57:48 +0000 (13:57 -0400)
project/recrutement/admin.py
project/recrutement/models.py

index 9955a58..e3dbc1c 100644 (file)
@@ -4,6 +4,7 @@ from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
 from django.contrib import admin
 from django.forms.models import BaseInlineFormSet
+from django.db.models import Avg
 
 from reversion.admin import VersionAdmin
 from datamaster_modeles.models import Region, Bureau
@@ -20,6 +21,15 @@ from recrutement.forms import *
 ### CONSTANTES
 IMPLANTATIONS_CENTRALES = [15, 19]
 
+class OrderedChangeList(admin.views.main.ChangeList):
+    """
+    Surcharge pour appliquer le order_by d'un annotate
+    """
+    def get_query_set(self):
+        qs = super(OrderedChangeList, self).get_query_set()
+        qs = qs.order_by('-moyenne')
+        return qs
+
 class OffreEmploiAdmin(VersionAdmin):
     date_hierarchy = 'date_creation'
     list_display = ('nom', 'date_limite', 'region',  'statut', 
@@ -359,9 +369,11 @@ class CandidatAdmin(VersionAdmin):
             grp_directeurs_bureau_recrutement in user_groupes or \
             grp_administrateurs_recrutement in user_groupes:
             return True
-        return False   
+        return False
+
+    def get_changelist(self, request, **kwargs):
+        return OrderedChangeList
 
-    ### Queryset
     def queryset(self, request):
         """
         Spécifie un queryset limité, autrement Django exécute un 
@@ -371,7 +383,9 @@ class CandidatAdmin(VersionAdmin):
         génération d'une requête infinie.
         
         """
-        qs = self.model._default_manager.get_query_set().select_related('offre_emploi')
+        
+        qs = self.model._default_manager.get_query_set().select_related('offre_emploi').annotate(moyenne=Avg('evaluations__note'))
+
         user_groupes = request.user.groups.all()
         if grp_drh_recrutement in user_groupes:
             return qs
index 52b4bc3..f531a08 100644 (file)
@@ -116,7 +116,7 @@ def sync_delete_groupe_evaluateur(sender, **kwargs):
 
 class CandidatEvaluation(models.Model):
     candidat = models.ForeignKey(emploi.Candidat, db_column='candidat', 
-                related_name='+',) 
+                related_name='evaluations',) 
     evaluateur = models.ForeignKey(Evaluateur, db_column='evaluateur', 
                     related_name='+', verbose_name=u'Évaluateur') 
     note = models.IntegerField(choices=NOTES, blank=True, null=True)