Voici les 3 étapes importantes pour pouvoir utiliser un Querysetmanager
- Création de la classe
- Création du manager
- Création du queryset + définition des méthodes
La classe appelle le manager qui appelle le queryset ce qui nous donne Classe > Manager > Queryset
Création de la classe
from django.db.models.query import QuerySet
from django.db.models import Model, Manager
class Project(Model, ...):
name = CharField(max_length = 100)
description = TextField(blank = True, null = True)
url = URLField(verify_exists = settings.SERVER_WEB_ACCESS)
...
objects = ProjectManager() # Appel du manager
Création du Manager
class ProjectManager(Manager):
def get_query_set(self):
return ProjectQuerySet(self.model) # Appel du queryset
Création du Queryset
class ProjectQuerySet(QuerySet):
def get_coworkers(self):
coworkers = []
for project in self:
for coworker in project.get_coworkers():
coworkers.append(coworker.id)
return User.objects.filter(pk__in = coworkers)
def get_toto(self):
return ...
En pratique
On peut désormais utiliser les méthodes get_coworkers() et get_toto() sur un queryset Project.
Project.objects.filter(name__contains=".net").get_coworkers() --> Récupère l'ensemble des collaborateurs des projets dont le nom contient ".net"
