diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-07-09 11:55:03 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-07-09 11:55:45 +0200 |
| commit | e6285cac83b2aa255c9611a6536a92d10d890842 (patch) | |
| tree | a4d1f6842d84698b4e82507d6d8368b8ac13fc45 /tests/annotations | |
| parent | b19372952c6b6281df499e6bf184adb2ab0f17aa (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.py | 12 |
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')) |
