Django-fr

Forum

#1 31-12-2010 10:38:26

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

.select_Related() et choix des champs

Bonjour à tous et bonne fêtes de fin d'année,

Est-il possible, lorsqu'on utilise
Model1.objects.all().select_related('model2')

d'indiquer uniquement certains champs de model2 , comme on peut le faire avec defer() ou only() sur Model1 ?
Mon model2 a vraiment beaucoup de champs, et je n'en veux que deux en l'occurence, ça fait une requête SQL énorme pour pas grand chose (juste le nom et prénom en fait...)

merci!

Dominique

Hors ligne

#2 31-12-2010 13:09:29

afranck64
Membre
Inscription : 30-12-2010
Messages : 20

Re : .select_Related() et choix des champs

Bonjour,
Bonnes fêtes de fin d'année à toi. smile

Oui bien entendu. Les objects retournés par "only", "defer", "select_related"... ont également ces méthodes donc tu peux aisément le faire.

Model1.objects.all().select_related('model2').only('name','surname')

Bien entendu tu peux l'étendre beaucoup plus.
@+

Hors ligne

#3 31-12-2010 18:16:19

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : .select_Related() et choix des champs

Heu ben pas trop
En faisatn ça on a une erreur car Model1 n'a pas de champs 'name' et 'surname', le queryset s'applique bien à lui, et l'enchainement ne change pas le modèle cible
si je les indique comme ça :

Model1.objects.all().select_related('model2').only('fkeyname__name','fkeyname__surname')

ça me double le nb de requetes SQL! (et là on est à 144 requêtes sur une page, stooooop)

Dernière modification par quinode (31-12-2010 18:16:42)

Hors ligne

#4 31-12-2010 20:06:59

afranck64
Membre
Inscription : 30-12-2010
Messages : 20

Re : .select_Related() et choix des champs

Bonsoir,

Heu ben pas trop
En faisatn ça on a une erreur car Model1 n'a pas de champs 'name' et 'surname'

c'était juste un exemple en rapport avec

Mon model2 a vraiment beaucoup de champs, et je n'en veux que deux en l'occurence, ça fait une requête SQL énorme pour pas grand chose (juste le nom et prénom en fait...)

.

par contre:

si je les indique comme ça :

Model1.objects.all().select_related('model2').only('fkeyname__name','fkeyname__surname')

ça me double le nb de requetes SQL! (et là on est à 144 requêtes sur une page, stooooop)

Je ne comprends pas comment tu calcules le nombre de requêtes .Mais Il me semble que tu devras faire un choix entre ce nombre de requêtes et le nombre de champs à récupérer.
Et d'après moi:
-Si la base de données est sur la même machine que le projet, alors tu devrais opter pour un petit nombre de requêtes tu n'auras pas à t'inquiéter du taux de transfert des données des multiples champs.
-Si la base de données est sur une machine distance, autant mieux utiliser la méthode à 144 requêtes je penses que les données transférées seront inférieures aux requêtes, et que le temps de traitement de ces requêtes ne devrait pas poser problème.

Hors ligne

#5 01-01-2011 15:39:31

quinode
Membre
Lieu : Auvergne
Inscription : 14-10-2010
Messages : 89
Site Web

Re : .select_Related() et choix des champs

afranck64 a écrit :

Bonsoir,
Je ne comprends pas comment tu calcules le nombre de requêtes .

Avec Django-debug-toolbar

afranck64 a écrit :

-Si la base de données est sur la même machine que le projet...

Non, le souci est surtout comment ne pas surcharger un VPS avec Django+PostGre+Apache et juste 256 ou 512 Mo
Et de pas avoir des pages trop lentes à s'afficher tout simplement

Apparemment de toute façon je ne couperai pas aux requêtes sur toutes les tables liées parceque j'en ai besoin pour afficher les champs "select" sur les formulaires...donc on va faire avec et utiliser plutot des attributs "choices" pour les champs ou c'est possible pour diminuer le nombre de tables consultées...

merci pour ton aide

Hors ligne

#6 01-01-2011 15:47:56

beegees
Membre
Inscription : 26-12-2010
Messages : 66

Re : .select_Related() et choix des champs

est-ce que Django-debug-toolbar est disponible pour Windows ?

Tu l'utilises via un web browser (google chrome, Firefox...) ?

Merci pour l'aide.

beegees

Hors ligne

Pied de page des forums