Refs #28939 -- Doc’d Prefetch behavior with multiple DBs.

This commit is contained in:
Mike Lissner 2020-09-17 11:29:57 +02:00 committed by Carlton Gibson
parent b376297d6c
commit 8c0794ba0d
1 changed files with 24 additions and 0 deletions

View File

@ -1295,6 +1295,26 @@ where prefetching with a custom ``QuerySet`` is useful:
>>> restaurants = Restaurant.objects.prefetch_related( >>> restaurants = Restaurant.objects.prefetch_related(
... Prefetch('best_pizza', queryset=queryset)) ... Prefetch('best_pizza', queryset=queryset))
When using multiple databases, ``Prefetch`` will respect your choice of
database. If the inner query does not specify a database, it will use the
database selected by the outer query. All of the following are valid::
>>> # Both inner and outer queries will use the 'replica' database
>>> Restaurant.objects.prefetch_related('pizzas__toppings').using('replica')
>>> Restaurant.objects.prefetch_related(
... Prefetch('pizzas__toppings'),
... ).using('replica')
>>>
>>> # Inner will use the 'replica' database; outer will use 'default' database
>>> Restaurant.objects.prefetch_related(
... Prefetch('pizzas__toppings', queryset=Toppings.objects.using('replica')),
... )
>>>
>>> # Inner will use 'replica' database; outer will use 'cold-storage' database
>>> Restaurant.objects.prefetch_related(
... Prefetch('pizzas__toppings', queryset=Toppings.objects.using('replica')),
... ).using('cold-storage')
.. note:: .. note::
The ordering of lookups matters. The ordering of lookups matters.
@ -3732,6 +3752,10 @@ lookups or :class:`Prefetch` objects you want to prefetch for. For example::
>>> restaurants = fetch_top_restaurants_from_cache() # A list of Restaurants >>> restaurants = fetch_top_restaurants_from_cache() # A list of Restaurants
>>> prefetch_related_objects(restaurants, 'pizzas__toppings') >>> prefetch_related_objects(restaurants, 'pizzas__toppings')
When using multiple databases with ``prefetch_related_objects``, the prefetch
query will use the database associated with the model instance. This can be
overridden by using a custom queryset in a related lookup.
``FilteredRelation()`` objects ``FilteredRelation()`` objects
------------------------------ ------------------------------