Hello,
I made a simple test to check the number of queries done :
# First part
order = Order.objects.get(id=22222) # one query
items = list(order.items.all()) # one query
items = list(order.items.all()) # one query
items = list(order.items.all()) # one query
# Second part
order = Order.objects.prefetch_related("items").get(id=22222) # two queries
items = list(order.items.all()) # no query
items = list(order.items.all()) # no query
items = list(order.items.all()) # no query
# Third part
order = Order.objects.get(id=22222) # one query
prefetch_related_objects([order], "items") # one query
items = list(order.items.all()) # no query
items = list(order.items.all()) # no query
items = list(order.items.all()) # no query
prefetch_related_objects([order], "items") # no more query
prefetch_related_objects([order], "items") # no more query
I was surprised that there was 4 queries for the First part of the test
instead of 2 for the other parts, because I was expecting that .all() would
also fill the cache and not only use it.
Maybe it is intended.
I think that this test or something else explaining this point could
enhance the documentation on prefetch_related() and
prefetch_related_objects().
I advised my colleagues to use prefetch_related_objects() when in doubt
whether the objects given have been already extended with prefetching.
Best regards,
Laurent Lyaudet
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/806fd09c-b997-4a1d-91c0-9c4cf5860f2an%40googlegroups.com.