summaryrefslogtreecommitdiff
path: root/django/db/models/functions/mixins.py
diff options
context:
space:
mode:
authorÉtienne Beaulé <beauleetienne0@gmail.com>2019-06-04 04:01:16 -0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-06-05 09:15:21 +0200
commit4e6f0024f19f74be2fe4d9ec637b87e82054ebd6 (patch)
tree08f29cbdc2a67fcdd3aaf3a6ff201b40fd21d696 /django/db/models/functions/mixins.py
parentca3f86288a16edbea55149aebc8d2df894b3033f (diff)
[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 c690afb873cac8035a3cb3be7c597a5ff0e4b261 and two following commits. Backport of 4b6dfe16226a81fea464ac5f77942f4d6ba266e8 from master.
Diffstat (limited to 'django/db/models/functions/mixins.py')
-rw-r--r--django/db/models/functions/mixins.py8
1 files changed, 4 insertions, 4 deletions
diff --git a/django/db/models/functions/mixins.py b/django/db/models/functions/mixins.py
index 8486ddb005..636340f015 100644
--- a/django/db/models/functions/mixins.py
+++ b/django/db/models/functions/mixins.py
@@ -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()