class OffreEmploiAdmin(admin.ModelAdmin):
date_hierarchy = 'date_creation'
- list_display = ('nom', 'resume', 'date_limite', )#'_actions',
- #'_tousCandidats')
+ list_display = ('nom', 'resume', 'date_limite', '_candidatsList', )
list_filter = ('region',)
-# def _tousCandidats(self, request):
-# return OffreEmploi.candidats.through
+ def _candidatsList(self, request):
+ return "<a href='%s?offre_emploi__id__exact=%s'>Voir les candidats</a>" % (reverse('admin:recrutement_candidat_changelist'), request.id)
+ _candidatsList.allow_tags = True
+ _candidatsList.short_description = "Liste des candidats"
-# def _actions(self, request):
-# return "<a href='%s?id=%s'>Voir le candidat</a>" % (reverse('admin:recrutement_candidat_changelist'), request.id)
-# _actions.allow_tags = True
+ def queryset(self, request):
+ """
+ Spécifie un queryset limité, autrement Django exécute un select_related()
+ sans paramètre, ce qui a pour effet de charger tous les objets FK, sans limite
+ de profondeur. Dès qu'on arrive, dans les modèles de Region, il existe plusieurs
+ boucles, ce qui conduit à la génération d'une requête infinie.
+ """
+ qs = self.model._default_manager.get_query_set()
+ return qs.select_related('offre_emploi')
class CandidatPieceInline(admin.TabularInline):
model = CandidatPiece
class CandidatAdmin(admin.ModelAdmin):
date_hierarchy = 'date_creation'
list_display = ('nom', 'prenom', 'offre_emploi','statut', '_actions')
+ list_filter = ('offre_emploi',)
fieldsets = (
('Informations personnelles', {
'fields': ('prenom','nom','genre', 'nationalite', 'date_naissance',
def _actions(self, request):
return "<a href='%s?id=%s'>Voir l'offre d'emploi</a>" % (reverse('admin:recrutement_offreemploi_changelist'), request.offre_emploi.id)
_actions.allow_tags = True
+ _actions.short_description = "Offre d'emploi"
class CandidatPieceAdmin(admin.ModelAdmin):
list_display = ('nom', 'candidat', )