Skip to content

Commit

Permalink
Fixed #24656 -- Added missing imports to query expressions doc.
Browse files Browse the repository at this point in the history
  • Loading branch information
niconoe authored and timgraham committed Apr 24, 2015
1 parent ad31bc0 commit 3768236
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,7 @@ answer newbie questions, and generally made Django that much better:
Niclas Olofsson <[email protected]>
Nicola Larosa <[email protected]>
Nicolas Lara <[email protected]>
Nicolas Noé <[email protected]>
Niran Babalola <[email protected]>
Nis Jørgensen <[email protected]>
Nowell Strite <http://nowell.strite.org/>
Expand Down
17 changes: 17 additions & 0 deletions docs/ref/models/expressions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ Some examples

.. 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.
Company.objects.filter(num_employees__gt=F('num_chairs'))

Expand Down Expand Up @@ -62,6 +65,12 @@ Some examples
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
-------------------

Expand All @@ -88,6 +97,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::

from django.db.models import F

reporter = Reporters.objects.get(name='Tintin')
reporter.stories_filed = F('stories_filed') + 1
reporter.save()
Expand Down Expand Up @@ -194,6 +204,8 @@ directly support ``output_field`` you will need to wrap the expression with
database functions like ``COALESCE`` and ``LOWER``, or aggregates like ``SUM``.
They can be used directly::

from django.db.models import Func, F

queryset.annotate(field_lower=Func(F('field'), function='LOWER'))

or they can be used to build a library of database functions::
Expand Down Expand Up @@ -259,6 +271,8 @@ like ``Sum()`` and ``Count()``, inherit from ``Aggregate()``.
Since ``Aggregate``\s are expressions and wrap expressions, you can represent
some complex computations::

from django.db.models import Count

Company.objects.annotate(
managers_required=(Count('num_employees') / 4) + Count('num_managers'))

Expand Down Expand Up @@ -314,6 +328,8 @@ Creating your own aggregate is extremely easy. At a minimum, you need
to define ``function``, but you can also completely customize the
SQL that is generated. Here's a brief example::

from django.db.models import Aggregate

class Count(Aggregate):
# supports COUNT(distinct field)
function = 'COUNT'
Expand Down Expand Up @@ -578,6 +594,7 @@ to play nice with other query expressions::

Let's see how it works::

>>> from django.db.models import F, Value, CharField
>>> qs = Company.objects.annotate(
... tagline=Coalesce([
... F('motto'),
Expand Down

0 comments on commit 3768236

Please sign in to comment.