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:
committed by
Mariusz Felisiak
parent
286fb73b69
commit
d01709aae2
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user