Kaydet (Commit) f2026ca5 authored tarafından Adnan Umer's avatar Adnan Umer Kaydeden (comit) Tim Graham

Fixed #29337 -- Added __len__() & __bool__() to RawQuerySet.

üst ec0319ff
...@@ -1293,6 +1293,14 @@ class RawQuerySet: ...@@ -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. ...@@ -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): ...@@ -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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment