Intéressé de savoir comment le chargement paresseux est réalisé dans des frameworks comme Django. Quand la décision est-elle prise d'effectuer la jointure? Et y a-t-il un moyen de forcer le chargement de Django? Y a-t-il des moments où vous devez forcer Django à charger?Relations de chargement paresseux dans Django (et autres MVC/ORM)
Répondre
La réponse générale est que Django prend la décision d'exécuter la requête lorsque vous demandez réellement des enregistrements. Le plus souvent, cela signifie itération sur le jeu de requête (for record in queryset:
) ou en utilisant la fonction intégrée list()
pour convertir le jeu de requête en liste.
Voir When QuerySets are evaluated pour plus de détails sur les documents officiels.
Elle accomplit cette mission en définissant une classe, appelée QuerySet
dans django/db/models/query.py
, où les méthodes spéciales comme __repr__
, __getitem__
et __iter__
sont codés pour faire la bonne chose.
Si vous avez besoin de forcer le chargement désireux suffit d'exécuter la fonction liste Python intégrée sur le queryset, comme:
qs = SomeModel.objects.all()
ql = list(qs)
Cet appel à list()
effectuera la requête DB et charger tous les objets en mémoire . Il devrait être assez rare que vous ayez besoin de faire cela, mais un cas est lorsque vous avez besoin d'utiliser les résultats de la requête à plus d'un endroit dans vos modèles. La conversion en liste et transmission de la liste dans le contexte de votre modèle n'effectuera la requête qu'une seule fois au lieu d'une fois pour chaque endroit de votre modèle que vous itérez.
- 1. Relations et chargement paresseux dans SubSonic 3.0
- 2. Chargement paresseux dans NHibernate
- 3. Chargement paresseux partiel
- 4. Relations dans Django Admin
- 5. nhibernate - désactive le chargement automatique \ paresseux des enregistrements enfant pour une ou plusieurs relations
- 6. Chargement de données paresseux avec riche: dataTable et riche: dataTableScroller
- 7. NHibernate: impossible de définir un chargement paresseux
- 8. Accès aux entités agrégées sans chargement paresseux
- 9. Django, formulaire de connexion dans les pages d'accueil et autres?
- 10. ASP.NET MVC 1.0 et Castle ActiveRecord 2.0 Chargement paresseux
- 11. Valeurs de chargement paresseux dans datable paginé en utilisant jquery
- 12. Chargement paresseux sur une collection d'objets
- 13. LINQ to SQL: chargement paresseux d'une association
- 14. Modification du chargement paresseux à l'exécution
- 15. iPhone Dev - Où mettre le code de chargement paresseux
- 16. Chargement paresseux des parties de pages de couture?
- 17. NHibernate one-to-many chargement paresseux quand déjà chargé
- 18. Comme les pagesflakes (Affichage de page incrémental OU chargement paresseux)?
- 19. doctrine orm: contournement du chargement paresseux et des enregistrements liés à la prélecture dans un getter
- 20. Comment puis-je sérialiser un bean jpa qui obtiendra également la relation de chargement paresseux?
- 21. Chargement et sauvegarde des données de relations m2m dans des widgets texte avec ModelForm
- 22. NHibernate et chargement paresseux: comment obtenir seulement quelques lignes de la collection?
- 23. Mon approche du chargement paresseux est-elle défectueuse?
- 24. comment charger des données de chargement paresseux pour les groupes dans AdvandedDataGrid dans flex?
- 25. JPA paresseux Hibernate utilisant SOAP
- 26. requête Django pour un grand nombre de relations
- 27. Chargement de plusieurs fichiers avec Django
- 28. NSPredicateEditor et les relations
- 29. Propriété de chargement paresseux de NHibernate - que signifie l'instrumentation de bytecode en temps de construction?
- 30. Informations sur le chargement différé dans GWT et GWT-Ext