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 ? ...