Filtrer les chercheurs par domaine de recherche dans l'admin et permettre le
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / chercheurs / admin.py
1 # -*- encoding: utf-8 -*-
2 from chercheurs.models import Chercheur, Publication, Groupe, ChercheurGroupe
3 from django.db import models
4 from django.contrib import admin
5 from django.core.urlresolvers import reverse as url
6 from django.forms.models import BaseInlineFormSet
7 from django.http import HttpResponseRedirect
8
9 class ChercheurAdmin(admin.ModelAdmin):
10 list_filter = ('groupes',)
11 list_per_page = 25
12 actions = ('remove_from_group',)
13
14 def remove_from_group(self, request, queryset):
15 groupe_id = request.GET.get('groupes__id__exact')
16 chercheur_ids = queryset.values_list('id', flat=True)
17 matches = ChercheurGroupe.objects.filter(groupe=groupe_id, chercheur__in=chercheur_ids)
18 matches.delete()
19 return HttpResponseRedirect(url('admin:chercheurs_chercheur_changelist') + '?groupes__id__exact=' + groupe_id)
20
21 def get_actions(self, request):
22 actions = super(ChercheurAdmin, self).get_actions(request)
23
24 # Si on filtre par groupe de recherche, offrir d'en retirer les
25 # chercheurs sélectionnés.
26 groupe_id = request.GET.get('groupes__id__exact')
27 if groupe_id:
28 groupe = Groupe.objects.get(id=groupe_id)
29 action_desc = actions['remove_from_group']
30 actions['remove_from_group'] = (action_desc[0], action_desc[1], u'Retirer du groupe « %s »' % groupe.nom)
31 else:
32 del actions['remove_from_group']
33 return actions
34
35 admin.site.register(Chercheur, ChercheurAdmin)
36 admin.site.register(Publication)
37 admin.site.register(Groupe)
38