|
@@ -62,6 +62,7 @@ and two directions (forward and reverse) for a total of six combinations.
|
|
|
If you're looking for ``ForwardManyToManyDescriptor`` or
|
|
|
``ReverseManyToManyDescriptor``, use ``ManyToManyDescriptor`` instead.
|
|
|
"""
|
|
|
+import warnings
|
|
|
|
|
|
from asgiref.sync import sync_to_async
|
|
|
|
|
@@ -79,6 +80,7 @@ from django.db.models.lookups import GreaterThan, LessThanOrEqual
|
|
|
from django.db.models.query import QuerySet
|
|
|
from django.db.models.query_utils import DeferredAttribute
|
|
|
from django.db.models.utils import AltersData, resolve_callables
|
|
|
+from django.utils.deprecation import RemovedInDjango60Warning
|
|
|
from django.utils.functional import cached_property
|
|
|
|
|
|
|
|
@@ -153,8 +155,23 @@ class ForwardManyToOneDescriptor:
|
|
|
return self.field.remote_field.model._base_manager.db_manager(hints=hints).all()
|
|
|
|
|
|
def get_prefetch_queryset(self, instances, queryset=None):
|
|
|
+ warnings.warn(
|
|
|
+ "get_prefetch_queryset() is deprecated. Use get_prefetch_querysets() "
|
|
|
+ "instead.",
|
|
|
+ RemovedInDjango60Warning,
|
|
|
+ stacklevel=2,
|
|
|
+ )
|
|
|
if queryset is None:
|
|
|
- queryset = self.get_queryset()
|
|
|
+ return self.get_prefetch_querysets(instances)
|
|
|
+ return self.get_prefetch_querysets(instances, [queryset])
|
|
|
+
|
|
|
+ def get_prefetch_querysets(self, instances, querysets=None):
|
|
|
+ if querysets and len(querysets) != 1:
|
|
|
+ raise ValueError(
|
|
|
+ "querysets argument of get_prefetch_querysets() should have a length "
|
|
|
+ "of 1."
|
|
|
+ )
|
|
|
+ queryset = querysets[0] if querysets else self.get_queryset()
|
|
|
queryset._add_hints(instance=instances[0])
|
|
|
|
|
|
rel_obj_attr = self.field.get_foreign_related_value
|
|
@@ -427,8 +444,23 @@ class ReverseOneToOneDescriptor:
|
|
|
return self.related.related_model._base_manager.db_manager(hints=hints).all()
|
|
|
|
|
|
def get_prefetch_queryset(self, instances, queryset=None):
|
|
|
+ warnings.warn(
|
|
|
+ "get_prefetch_queryset() is deprecated. Use get_prefetch_querysets() "
|
|
|
+ "instead.",
|
|
|
+ RemovedInDjango60Warning,
|
|
|
+ stacklevel=2,
|
|
|
+ )
|
|
|
if queryset is None:
|
|
|
- queryset = self.get_queryset()
|
|
|
+ return self.get_prefetch_querysets(instances)
|
|
|
+ return self.get_prefetch_querysets(instances, [queryset])
|
|
|
+
|
|
|
+ def get_prefetch_querysets(self, instances, querysets=None):
|
|
|
+ if querysets and len(querysets) != 1:
|
|
|
+ raise ValueError(
|
|
|
+ "querysets argument of get_prefetch_querysets() should have a length "
|
|
|
+ "of 1."
|
|
|
+ )
|
|
|
+ queryset = querysets[0] if querysets else self.get_queryset()
|
|
|
queryset._add_hints(instance=instances[0])
|
|
|
|
|
|
rel_obj_attr = self.related.field.get_local_related_value
|
|
@@ -728,9 +760,23 @@ def create_reverse_many_to_one_manager(superclass, rel):
|
|
|
return self._apply_rel_filters(queryset)
|
|
|
|
|
|
def get_prefetch_queryset(self, instances, queryset=None):
|
|
|
+ warnings.warn(
|
|
|
+ "get_prefetch_queryset() is deprecated. Use get_prefetch_querysets() "
|
|
|
+ "instead.",
|
|
|
+ RemovedInDjango60Warning,
|
|
|
+ stacklevel=2,
|
|
|
+ )
|
|
|
if queryset is None:
|
|
|
- queryset = super().get_queryset()
|
|
|
+ return self.get_prefetch_querysets(instances)
|
|
|
+ return self.get_prefetch_querysets(instances, [queryset])
|
|
|
|
|
|
+ def get_prefetch_querysets(self, instances, querysets=None):
|
|
|
+ if querysets and len(querysets) != 1:
|
|
|
+ raise ValueError(
|
|
|
+ "querysets argument of get_prefetch_querysets() should have a "
|
|
|
+ "length of 1."
|
|
|
+ )
|
|
|
+ queryset = querysets[0] if querysets else super().get_queryset()
|
|
|
queryset._add_hints(instance=instances[0])
|
|
|
queryset = queryset.using(queryset._db or self._db)
|
|
|
|
|
@@ -1087,9 +1133,23 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
|
|
|
return self._apply_rel_filters(queryset)
|
|
|
|
|
|
def get_prefetch_queryset(self, instances, queryset=None):
|
|
|
+ warnings.warn(
|
|
|
+ "get_prefetch_queryset() is deprecated. Use get_prefetch_querysets() "
|
|
|
+ "instead.",
|
|
|
+ RemovedInDjango60Warning,
|
|
|
+ stacklevel=2,
|
|
|
+ )
|
|
|
if queryset is None:
|
|
|
- queryset = super().get_queryset()
|
|
|
+ return self.get_prefetch_querysets(instances)
|
|
|
+ return self.get_prefetch_querysets(instances, [queryset])
|
|
|
|
|
|
+ def get_prefetch_querysets(self, instances, querysets=None):
|
|
|
+ if querysets and len(querysets) != 1:
|
|
|
+ raise ValueError(
|
|
|
+ "querysets argument of get_prefetch_querysets() should have a "
|
|
|
+ "length of 1."
|
|
|
+ )
|
|
|
+ queryset = querysets[0] if querysets else super().get_queryset()
|
|
|
queryset._add_hints(instance=instances[0])
|
|
|
queryset = queryset.using(queryset._db or self._db)
|
|
|
queryset = _filter_prefetch_queryset(
|