Browse Source

Fixed #22349 -- Added a note clarifying `RawQuerySet` has no `__len__`.

Thanks cdestigter for the report.
Moayad Mardini 10 years ago
parent
commit
2d425116e2
2 changed files with 14 additions and 1 deletions
  1. 1 0
      AUTHORS
  2. 13 1
      docs/topics/db/sql.txt

+ 1 - 0
AUTHORS

@@ -422,6 +422,7 @@ answer newbie questions, and generally made Django that much better:
     Javier Mansilla <javimansilla@gmail.com>
     masonsimon+django@gmail.com
     Manuzhai
+    Moayad Mardini <moayad.m@gmail.com>
     Petr Marhoun <petr.marhoun@gmail.com>
     Petar Marić <http://www.petarmaric.com/>
     Nuno Mariz <nmariz@gmail.com>

+ 13 - 1
docs/topics/db/sql.txt

@@ -33,7 +33,8 @@ return model instances:
 
 This method takes a raw SQL query, executes it, and returns a
 ``django.db.models.query.RawQuerySet`` instance. This ``RawQuerySet`` instance
-can be iterated over just like a normal QuerySet to provide object instances.
+can be iterated over just like a normal
+:class:`~django.db.models.query.QuerySet` to provide object instances.
 
 This is best illustrated with an example. Suppose you have the following model::
 
@@ -84,6 +85,17 @@ options that make it very powerful.
     both rows will match. To prevent this, perform the correct typecasting
     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``. The reason
+    these methods are not implemented in ``RawQuerySet`` is that implementing
+    them without internal caching would be a performance drawback and adding
+    such caching would be backward incompatible.
+
 Mapping query fields to model fields
 ------------------------------------