1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

[2.2.x] Fixed #30542 -- Fixed crash of numerical aggregations with filter.

Filters in annotations crashed when used with numerical-type
aggregations (i.e. Avg, StdDev, and Variance). This was caused as the
source expressions no not necessarily have an output_field (such as the
filter field), which lead to an AttributeError: 'WhereNode' object has
no attribute output_field.

Thanks to Chuan-Zheng Lee for the report.

Regression in c690afb873 and two following
commits.

Backport of 4b6dfe1622 from master.
This commit is contained in:
Étienne Beaulé
2019-06-04 04:01:16 -03:00
committed by Mariusz Felisiak
parent ca3f86288a
commit 4e6f0024f1
3 changed files with 21 additions and 6 deletions

View File

@@ -42,9 +42,9 @@ class FixDurationInputMixin:
class NumericOutputFieldMixin:
def _resolve_output_field(self):
source_expressions = self.get_source_expressions()
if any(isinstance(s.output_field, DecimalField) for s in source_expressions):
source_fields = self.get_source_fields()
if any(isinstance(s, DecimalField) for s in source_fields):
return DecimalField()
if any(isinstance(s.output_field, IntegerField) for s in source_expressions):
if any(isinstance(s, IntegerField) for s in source_fields):
return FloatField()
return super()._resolve_output_field() if source_expressions else FloatField()
return super()._resolve_output_field() if source_fields else FloatField()