Je rencontre des problèmes de performances avec Django en raison des relations m2m. J'ai une liste d'objets Something qui ont tous Something_instance.item_set, donc j'appelle Something_instance.item_set.all() plusieurs fois. Je voudrais mettre cette requête en cache dans Something_instance pour ne pas avoir à exécuter autant de requêtes. Est-ce possible? (Ceci est essentiellement un hack pour obtenir select_related() pour travailler pour m2m).Ajout de mini-caches aux modèles django
EDIT: Les 2 extraits suivants montrent le problème que je rencontre. Dans views.py, j'interroge la relation m2m.
for t in items:
try:
t.price = t.user_item_rel_set.get(user=u).payment_amount
except:
t.price = -1 * t.buyer_item_rel_set.get(buyer=u).payment_amount
return items
En outre, une fonction dans mon modèle:
def listBuyers(self):
return self.buyer_item_rel_set.all()
J'ai parce que je l'utilise dans mon modèle pour obtenir des informations à partir de ces éléments.
L'interrogation des relations m2m s'exécute deux fois: une fois dans le fichier views.py, puis une fois dans le modèle. Je voudrais obtenir le jeu de queues dans les vues, l'attacher à l'instance du modèle, puis l'alimenter au modèle, de sorte qu'il (et le code views.py) utilise le jeu de queues mis en cache, au lieu de récupérer à nouveau.
Mais dans ce cas, 'self' fait référence à un modèle Django, donc je ne peux pas ajouter de choses dessus. – victor
Pourquoi pas? Bien sûr vous pouvez. Vous pouvez ajouter ce que vous voulez à n'importe quel objet Python. (Self fait référence à l'instance, pas le modèle, bien sûr.) –
Un simple test: x = Item.objects.all() [0] = ' x._test aoeu' print x._test la ci-dessus échouera. – victor