1
0
mirror of https://github.com/django/django.git synced 2025-10-29 00:26:07 +00:00

Fixed #24141 -- Added QuerySet.contains().

This commit is contained in:
Johan Schiff
2020-06-09 11:23:31 +02:00
committed by Mariusz Felisiak
parent 286fb73b69
commit d01709aae2
7 changed files with 132 additions and 18 deletions

View File

@@ -808,6 +808,27 @@ class QuerySet:
return self.query.has_results(using=self.db)
return bool(self._result_cache)
def contains(self, obj):
"""Return True if the queryset contains an object."""
self._not_support_combined_queries('contains')
if self._fields is not None:
raise TypeError(
'Cannot call QuerySet.contains() after .values() or '
'.values_list().'
)
try:
if obj._meta.concrete_model != self.model._meta.concrete_model:
return False
except AttributeError:
raise TypeError("'obj' must be a model instance.")
if obj.pk is None:
raise ValueError(
'QuerySet.contains() cannot be used on unsaved objects.'
)
if self._result_cache is not None:
return obj in self._result_cache
return self.filter(pk=obj.pk).exists()
def _prefetch_related_objects(self):
# This method can only be called once the result cache has been filled.
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)