From 8b040e3cbbb2e81420e777afc3ca48a1c8f4dd5a Mon Sep 17 00:00:00 2001 From: Ian Foote Date: Sun, 15 Nov 2020 22:43:47 +0000 Subject: Fixed #25534, Fixed #31639 -- Added support for transform references in expressions. Thanks Mariusz Felisiak and Simon Charette for reviews. --- docs/topics/db/queries.txt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'docs/topics') diff --git a/docs/topics/db/queries.txt b/docs/topics/db/queries.txt index d29882e342..c92b8b0944 100644 --- a/docs/topics/db/queries.txt +++ b/docs/topics/db/queries.txt @@ -669,6 +669,36 @@ The ``F()`` objects support bitwise operations by ``.bitand()``, ``.bitor()``, Support for ``.bitxor()`` was added. +.. _using-transforms-in-expressions: + +Expressions can reference transforms +------------------------------------ + +.. versionadded: 3.2 + +Django supports using transforms in expressions. + +For example, to find all ``Entry`` objects published in the same year as they +were last modified:: + + >>> Entry.objects.filter(pub_date__year=F('mod_date__year')) + +To find the earliest year an entry was published, we can issue the query:: + + >>> Entry.objects.aggregate(first_published_year=Min('pub_date__year')) + +This example finds the value of the highest rated entry and the total number +of comments on all entries for each year:: + + >>> Entry.objects.values('pub_date__year').annotate( + ... top_rating=Subquery( + ... Entry.objects.filter( + ... pub_date__year=OuterRef('pub_date__year'), + ... ).order_by('-rating').values('rating')[:1] + ... ), + ... total_comments=Sum('number_of_comments'), + ... ) + The ``pk`` lookup shortcut -------------------------- -- cgit v1.3