summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJohan Schiff <johan@radkompaniet.se>2020-06-09 11:23:31 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-03-06 20:40:29 +0100
commitd01709aae21de9cd2565b9c52f32732ea28a2d98 (patch)
tree83326f30469fb3dda431362dea3adfd6e058f85f /django
parent286fb73b6962d197ed0cf041755fb724cfe08600 (diff)
Fixed #24141 -- Added QuerySet.contains().
Diffstat (limited to 'django')
-rw-r--r--django/db/models/query.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 02c1b31435..ca72b23aea 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -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)