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"