[1.8.x] Fixed #24656 -- Added missing imports to query expressions doc.
Backport of 37682368a6
from master
This commit is contained in:
parent
911e09833b
commit
61e902c4c4
1
AUTHORS
1
AUTHORS
|
@ -517,6 +517,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
Niclas Olofsson <n@niclasolofsson.se>
|
Niclas Olofsson <n@niclasolofsson.se>
|
||||||
Nicola Larosa <nico@teknico.net>
|
Nicola Larosa <nico@teknico.net>
|
||||||
Nicolas Lara <nicolaslara@gmail.com>
|
Nicolas Lara <nicolaslara@gmail.com>
|
||||||
|
Nicolas Noé <nicolas@niconoe.eu>
|
||||||
Niran Babalola <niran@niran.org>
|
Niran Babalola <niran@niran.org>
|
||||||
Nis Jørgensen <nis@superlativ.dk>
|
Nis Jørgensen <nis@superlativ.dk>
|
||||||
Nowell Strite <http://nowell.strite.org/>
|
Nowell Strite <http://nowell.strite.org/>
|
||||||
|
|
|
@ -30,6 +30,9 @@ Some examples
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
from django.db.models import F, Count
|
||||||
|
from django.db.models.functions import Length
|
||||||
|
|
||||||
# Find companies that have more employees than chairs.
|
# Find companies that have more employees than chairs.
|
||||||
Company.objects.filter(num_employees__gt=F('num_chairs'))
|
Company.objects.filter(num_employees__gt=F('num_chairs'))
|
||||||
|
|
||||||
|
@ -66,6 +69,12 @@ Some examples
|
||||||
Built-in Expressions
|
Built-in Expressions
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
These expressions are defined in ``django.db.models.expressions`` and
|
||||||
|
``django.db.models.aggregates``, but for convenience they're available and
|
||||||
|
usually imported from :mod:`django.db.models`.
|
||||||
|
|
||||||
``F()`` expressions
|
``F()`` expressions
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
@ -92,6 +101,7 @@ into memory and manipulated it using familiar Python operators, and then saved
|
||||||
the object back to the database. But instead we could also have done::
|
the object back to the database. But instead we could also have done::
|
||||||
|
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
|
|
||||||
reporter = Reporters.objects.get(name='Tintin')
|
reporter = Reporters.objects.get(name='Tintin')
|
||||||
reporter.stories_filed = F('stories_filed') + 1
|
reporter.stories_filed = F('stories_filed') + 1
|
||||||
reporter.save()
|
reporter.save()
|
||||||
|
@ -198,6 +208,8 @@ directly support ``output_field`` you will need to wrap the expression with
|
||||||
database functions like ``COALESCE`` and ``LOWER``, or aggregates like ``SUM``.
|
database functions like ``COALESCE`` and ``LOWER``, or aggregates like ``SUM``.
|
||||||
They can be used directly::
|
They can be used directly::
|
||||||
|
|
||||||
|
from django.db.models import Func, F
|
||||||
|
|
||||||
queryset.annotate(field_lower=Func(F('field'), function='LOWER'))
|
queryset.annotate(field_lower=Func(F('field'), function='LOWER'))
|
||||||
|
|
||||||
or they can be used to build a library of database functions::
|
or they can be used to build a library of database functions::
|
||||||
|
@ -263,6 +275,8 @@ like ``Sum()`` and ``Count()``, inherit from ``Aggregate()``.
|
||||||
Since ``Aggregate``\s are expressions and wrap expressions, you can represent
|
Since ``Aggregate``\s are expressions and wrap expressions, you can represent
|
||||||
some complex computations::
|
some complex computations::
|
||||||
|
|
||||||
|
from django.db.models import Count
|
||||||
|
|
||||||
Company.objects.annotate(
|
Company.objects.annotate(
|
||||||
managers_required=(Count('num_employees') / 4) + Count('num_managers'))
|
managers_required=(Count('num_employees') / 4) + Count('num_managers'))
|
||||||
|
|
||||||
|
@ -318,6 +332,8 @@ Creating your own aggregate is extremely easy. At a minimum, you need
|
||||||
to define ``function``, but you can also completely customize the
|
to define ``function``, but you can also completely customize the
|
||||||
SQL that is generated. Here's a brief example::
|
SQL that is generated. Here's a brief example::
|
||||||
|
|
||||||
|
from django.db.models import Aggregate
|
||||||
|
|
||||||
class Count(Aggregate):
|
class Count(Aggregate):
|
||||||
# supports COUNT(distinct field)
|
# supports COUNT(distinct field)
|
||||||
function = 'COUNT'
|
function = 'COUNT'
|
||||||
|
@ -582,6 +598,7 @@ to play nice with other query expressions::
|
||||||
|
|
||||||
Let's see how it works::
|
Let's see how it works::
|
||||||
|
|
||||||
|
>>> from django.db.models import F, Value, CharField
|
||||||
>>> qs = Company.objects.annotate(
|
>>> qs = Company.objects.annotate(
|
||||||
... tagline=Coalesce([
|
... tagline=Coalesce([
|
||||||
... F('motto'),
|
... F('motto'),
|
||||||
|
|
Loading…
Reference in New Issue