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
### 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',
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
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
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)