diff options
| author | Johan Schiff <johan@radkompaniet.se> | 2020-06-09 11:23:31 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-03-06 20:40:29 +0100 |
| commit | d01709aae21de9cd2565b9c52f32732ea28a2d98 (patch) | |
| tree | 83326f30469fb3dda431362dea3adfd6e058f85f /django | |
| parent | 286fb73b6962d197ed0cf041755fb724cfe08600 (diff) | |
Fixed #24141 -- Added QuerySet.contains().
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/query.py | 21 |
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) |
