Dans une vue Django que je fais quelque chose comme ça ..Optimisation de Django: obtenir des informations de modèle en masse ..?
lists = Stuff.objects.exclude(model2=None)
for alist in lists:
if alist.model2.model3.id == target_id:
addSomeStuff
La lenteur vient de passer de modèle (ligne de base de données) pour modéliser l'instruction if.
Cela prend en fait près d'une seconde à s'exécuter lorsque les listes ne contiennent que 486 éléments. Je crois que c'est lent car 486 * 2 + 1 db recherches sont en cours. Si je devais réécrire cela, alors il a saisi toute la table model2 et la table model3 à la fois, et ensuite filtrer juste là, ce serait 3 hits db, je crois que ça irait beaucoup plus vite. Cela détruirait toute la gentillesse de Django.
Est-il possible de convaincre django de faire une sorte de recherche de données en masse comme celle-ci?