summaryrefslogtreecommitdiff
path: root/tests/annotations
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2020-07-09 11:55:03 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-07-09 11:55:45 +0200
commite6285cac83b2aa255c9611a6536a92d10d890842 (patch)
treea4d1f6842d84698b4e82507d6d8368b8ac13fc45 /tests/annotations
parentb19372952c6b6281df499e6bf184adb2ab0f17aa (diff)
[3.1.x] Fixed #31773 -- Fixed preserving output_field in ExpressionWrapper for combined expressions.
Thanks Thodoris Sotiropoulos for the report and Simon Charette for the implementation idea. Regression in df32fd42b84cc6dbba173201f244491b0d154a63. Backport of 8a6df55f2dd5131282084a4edfd48f63fbf8c69a from master
Diffstat (limited to 'tests/annotations')
-rw-r--r--tests/annotations/tests.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/tests/annotations/tests.py b/tests/annotations/tests.py
index 9f35074934..aa3682b86b 100644
--- a/tests/annotations/tests.py
+++ b/tests/annotations/tests.py
@@ -6,8 +6,8 @@ from django.core.exceptions import FieldDoesNotExist, FieldError
from django.db import connection
from django.db.models import (
BooleanField, Case, CharField, Count, DateTimeField, Exists,
- ExpressionWrapper, F, Func, IntegerField, Max, NullBooleanField, OuterRef,
- Q, Subquery, Sum, Value, When,
+ ExpressionWrapper, F, FloatField, Func, IntegerField, Max,
+ NullBooleanField, OuterRef, Q, Subquery, Sum, Value, When,
)
from django.db.models.expressions import RawSQL
from django.db.models.functions import Length, Lower
@@ -178,6 +178,14 @@ class NonAggregateAnnotationTestCase(TestCase):
self.assertEqual(book.combined, 12)
self.assertEqual(book.rating_count, 1)
+ def test_combined_f_expression_annotation_with_aggregation(self):
+ book = Book.objects.filter(isbn='159059725').annotate(
+ combined=ExpressionWrapper(F('price') * F('pages'), output_field=FloatField()),
+ rating_count=Count('rating'),
+ ).first()
+ self.assertEqual(book.combined, 13410.0)
+ self.assertEqual(book.rating_count, 1)
+
def test_aggregate_over_annotation(self):
agg = Author.objects.annotate(other_age=F('age')).aggregate(otherage_sum=Sum('other_age'))
other_agg = Author.objects.aggregate(age_sum=Sum('age'))