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>
     Javier Mansilla <javimansilla@gmail.com>
     masonsimon+django@gmail.com
     masonsimon+django@gmail.com
     Manuzhai
     Manuzhai
+    Moayad Mardini <moayad.m@gmail.com>
     Petr Marhoun <petr.marhoun@gmail.com>
     Petr Marhoun <petr.marhoun@gmail.com>
     Petar Marić <http://www.petarmaric.com/>
     Petar Marić <http://www.petarmaric.com/>
     Nuno Mariz <nmariz@gmail.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
 This method takes a raw SQL query, executes it, and returns a
 ``django.db.models.query.RawQuerySet`` instance. This ``RawQuerySet`` instance
 ``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::
 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
     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``. 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
 Mapping query fields to model fields
 ------------------------------------
 ------------------------------------