mirror of
https://github.com/django/django.git
synced 2025-09-26 12:09:19 +00:00
Fixed #22023 -- Raised an error for values() followed by defer() or only().
Previously, doing so resulted in invalid data or crash. Thanks jtiai for the report and Karol Jochelson, Jakub Nowak, Loic Bistuer, and Baptiste Mispelon for reviews.
This commit is contained in:
parent
a7639722f5
commit
faf6a911ad
4 changed files with 34 additions and 3 deletions
|
@ -502,14 +502,23 @@ A few subtleties that are worth mentioning:
|
|||
made after a ``values()`` call will have its extra selected fields
|
||||
ignored.
|
||||
|
||||
* Calling :meth:`only()` and :meth:`defer()` after ``values()`` doesn't make
|
||||
sense, so doing so will raise a ``NotImplementedError``.
|
||||
|
||||
.. versionadded:: 1.7
|
||||
|
||||
The last point above is new. Previously, calling :meth:`only()` and
|
||||
:meth:`defer()` after ``values()`` was allowed, but it either crashed or
|
||||
returned incorrect results.
|
||||
|
||||
A ``ValuesQuerySet`` is useful when you know you're only going to need values
|
||||
from a small number of the available fields and you won't need the
|
||||
functionality of a model instance object. It's more efficient to select only
|
||||
the fields you need to use.
|
||||
|
||||
Finally, note a ``ValuesQuerySet`` is a subclass of ``QuerySet``, so it has all
|
||||
methods of ``QuerySet``. You can call ``filter()`` on it, or ``order_by()``, or
|
||||
whatever. Yes, that means these two calls are identical::
|
||||
Finally, note that a ``ValuesQuerySet`` is a subclass of ``QuerySet`` and it
|
||||
implements most of the same methods. You can call ``filter()`` on it,
|
||||
``order_by()``, etc. That means that these two calls are identical::
|
||||
|
||||
Blog.objects.values().order_by('id')
|
||||
Blog.objects.order_by('id').values()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue