Fixed #29337 -- Added __len__() & __bool__() to RawQuerySet.
This commit is contained in:
parent
ec0319ff82
commit
f2026ca5e2
|
@ -1293,6 +1293,14 @@ class RawQuerySet:
|
||||||
if self._result_cache is None:
|
if self._result_cache is None:
|
||||||
self._result_cache = list(self.iterator())
|
self._result_cache = list(self.iterator())
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
self._fetch_all()
|
||||||
|
return len(self._result_cache)
|
||||||
|
|
||||||
|
def __bool__(self):
|
||||||
|
self._fetch_all()
|
||||||
|
return bool(self._result_cache)
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
self._fetch_all()
|
self._fetch_all()
|
||||||
return iter(self._result_cache)
|
return iter(self._result_cache)
|
||||||
|
|
|
@ -85,14 +85,6 @@ options that make it very powerful.
|
||||||
both rows will match. To prevent this, perform the correct typecasting
|
both rows will match. To prevent this, perform the correct typecasting
|
||||||
before using the value in a query.
|
before using the value in a query.
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
While a ``RawQuerySet`` instance can be iterated over like a normal
|
|
||||||
:class:`~django.db.models.query.QuerySet`, ``RawQuerySet`` doesn't
|
|
||||||
implement all methods you can use with ``QuerySet``. For example,
|
|
||||||
``__bool__()`` and ``__len__()`` are not defined in ``RawQuerySet``, and
|
|
||||||
thus all ``RawQuerySet`` instances are considered ``True``.
|
|
||||||
|
|
||||||
Mapping query fields to model fields
|
Mapping query fields to model fields
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -330,3 +330,11 @@ class RawQueryTests(TestCase):
|
||||||
books = Book.objects.raw('SELECT * FROM raw_query_book')
|
books = Book.objects.raw('SELECT * FROM raw_query_book')
|
||||||
list(books.iterator())
|
list(books.iterator())
|
||||||
list(books.iterator())
|
list(books.iterator())
|
||||||
|
|
||||||
|
def test_bool(self):
|
||||||
|
self.assertIs(bool(Book.objects.raw('SELECT * FROM raw_query_book')), True)
|
||||||
|
self.assertIs(bool(Book.objects.raw('SELECT * FROM raw_query_book WHERE id = 0')), False)
|
||||||
|
|
||||||
|
def test_len(self):
|
||||||
|
self.assertEqual(len(Book.objects.raw('SELECT * FROM raw_query_book')), 4)
|
||||||
|
self.assertEqual(len(Book.objects.raw('SELECT * FROM raw_query_book WHERE id = 0')), 0)
|
||||||
|
|
Loading…
Reference in New Issue