From 26983c4c6414f00a2bcf364436ecce0f5e73851d Mon Sep 17 00:00:00 2001 From: Moayad Mardini Date: Thu, 12 Jun 2014 20:43:30 +0300 Subject: [1.6.x] Fixed #22349 -- Added a note clarifying `RawQuerySet` has no `__len__`. Thanks cdestigter for the report. Backport of 2d425116e2 from master --- docs/topics/db/sql.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/topics/db/sql.txt b/docs/topics/db/sql.txt index e577ca3648..478e2898f1 100644 --- a/docs/topics/db/sql.txt +++ b/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 ------------------------------------ -- cgit v1.3