From d01709aae21de9cd2565b9c52f32732ea28a2d98 Mon Sep 17 00:00:00 2001 From: Johan Schiff Date: Tue, 9 Jun 2020 11:23:31 +0200 Subject: Fixed #24141 -- Added QuerySet.contains(). --- django/db/models/query.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'django') 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) -- cgit v1.3