Sommaire

Les managers

class Manager(...)

Un manager est une interface gérant les opérations en relation avec la base de données pour les modèles Django ; c’est l’API de l’ORM. Chaque modèle doit avoir au moins un manager. Par défaut, Django crée systématiquement un manager pour chaque modèle en lui donnant le nom objects.

Le comportement de la classe Manager est expliqué à la section Les QuerySet : effectuer des requêtes de ce même chapitre. Nous allons seulement ici décrire comment implémenter des comportements particuliers ou spécifiques à l’aide d’un manager.

Comment renommer le manager par défaut, si on souhaite utiliser le nom objects, par exemple pour un attribut ? Cela est possible de la façon suivante :

from django.db import models  
class JavaClass(models.Model):  
    objects = models.CharField()   
    classes = models.Manager()   # Affectation d’un manager

Dans cet exemple, la syntaxe habituelle JavaClass.objects.all() générera une exception de type AttributeError. Pour récupérer tous les objets on devra écrire JavaClass.classes.all().

Si on n’avait pas défini objects = models.CharField(), le manager objects aurait quand même provoqué une erreur, car lorsque Django trouve un manager, il n’installe plus le manager par défaut.

1. Comment et pourquoi écrire vos propres managers ? ...