Mise à jour de 'source/part-3-django-concepts/queryset.adoc'
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
bc725d59dd
commit
b17a169762
|
@ -11,7 +11,8 @@ L'ORM de Django (et donc, chacune des classes qui composent votre modèle) propo
|
||||||
d'autres filtres à des filtres existants.
|
d'autres filtres à des filtres existants.
|
||||||
|
|
||||||
Ces deux propriétés vont de paire; par défaut, chaque classe de votre modèle propose un attribut `objects`, qui correspond
|
Ces deux propriétés vont de paire; par défaut, chaque classe de votre modèle propose un attribut `objects`, qui correspond
|
||||||
à un manager (ou un gestionnaire, si vous préférez). Ce gestionnaire constitue l'interface par laquelle vous accéderez à la base de données. Mais pour cela, vous aurez aussi besoin d'appliquer certains requêtes ou filtres. Et pour cela, vous aurez besoin des `querysets`, qui consistent en des ... ensembles de requêtes :-).
|
à un manager (ou un gestionnaire, si vous préférez).
|
||||||
|
Ce gestionnaire constitue l'interface par laquelle vous accéderez à la base de données. Mais pour cela, vous aurez aussi besoin d'appliquer certains requêtes ou filtres. Et pour cela, vous aurez besoin des `querysets`, qui consistent en des ... ensembles de requêtes :-).
|
||||||
|
|
||||||
Si on veut connaître la requête SQL sous-jacente à l'exécution du queryset, il suffit d'appeler la fonction str() sur la propriété `query`:
|
Si on veut connaître la requête SQL sous-jacente à l'exécution du queryset, il suffit d'appeler la fonction str() sur la propriété `query`:
|
||||||
|
|
||||||
|
@ -66,9 +67,34 @@ Ajouter les sujets suivants :
|
||||||
|
|
||||||
. Prefetch
|
. Prefetch
|
||||||
. select_related
|
. select_related
|
||||||
|
|
||||||
|
|
||||||
#### Jointures
|
==== Gestionnaire de models (managers) et opérations
|
||||||
|
|
||||||
|
Chaque définition de modèle utilise un `Manager`, afin d'accéder à la base de données et traiter nos demandes.
|
||||||
|
Indirectement, une instance de modèle ne *connait* **pas** la base de données: c'est son gestionnaire qui a cette tâche.
|
||||||
|
Il existe deux exceptions à cette règle: les méthodes `save()` et `update()`.
|
||||||
|
|
||||||
|
* Instanciation: MyClass()
|
||||||
|
* Récupération: MyClass.objects.get(pk=...)
|
||||||
|
* Sauvegarde : MyClass().save()
|
||||||
|
* Création: MyClass.objects.create(...)
|
||||||
|
* Liste des enregistrements: MyClass.objects.all()
|
||||||
|
|
||||||
|
Par défaut, le gestionnaire est accessible au travers de la propriété `objects`.
|
||||||
|
Cette propriété a une double utilité:
|
||||||
|
|
||||||
|
1. Elle est facile à surcharger - il nous suffit de définir une nouvelle classe héritant de ModelManager, puis de définir, au niveau de la classe, une nouvelle assignation à la propriété `objects`
|
||||||
|
2. Il est tout aussi facile de définir d'autres propriétés présentant des filtres bien spécifiques.
|
||||||
|
|
||||||
|
|
||||||
|
==== Requêtes
|
||||||
|
|
||||||
|
DANGER: Les requêtes sont sensibles à la casse, **même** si le moteur de base de données ne l'est pas.
|
||||||
|
C'est notamment le cas pour Microsoft SQL Server; faire une recherche directement via les outils de Microsoft ne retournera pas
|
||||||
|
obligatoirement les mêmes résultats que les managers, qui seront beaucoup plus tatillons sur la qualité des recherches par
|
||||||
|
rapport aux filtres paramétrés en entrée.
|
||||||
|
|
||||||
|
==== Jointures
|
||||||
|
|
||||||
Pour appliquer une jointure sur un modèle, nous pouvons passer par les méthodes `select_related` et `prefetch_related`.
|
Pour appliquer une jointure sur un modèle, nous pouvons passer par les méthodes `select_related` et `prefetch_related`.
|
||||||
Il faut cependant faire **très** attention au prefetch related, qui fonctionne en fait comme une grosse requête dans laquelle
|
Il faut cependant faire **très** attention au prefetch related, qui fonctionne en fait comme une grosse requête dans laquelle
|
||||||
|
|
Loading…
Reference in New Issue