diff --git a/django/contrib/postgres/aggregates/mixins.py b/django/contrib/postgres/aggregates/mixins.py index 340a9178793..68f24a5ce3a 100644 --- a/django/contrib/postgres/aggregates/mixins.py +++ b/django/contrib/postgres/aggregates/mixins.py @@ -3,18 +3,21 @@ from django.db.models.expressions import OrderByList class OrderableAggMixin: def __init__(self, *expressions, ordering=(), **extra): - if isinstance(ordering, (list, tuple)): + if not ordering: + self.order_by = None + elif isinstance(ordering, (list, tuple)): self.order_by = OrderByList(*ordering) else: self.order_by = OrderByList(ordering) super().__init__(*expressions, **extra) def resolve_expression(self, *args, **kwargs): - self.order_by = self.order_by.resolve_expression(*args, **kwargs) + if self.order_by is not None: + self.order_by = self.order_by.resolve_expression(*args, **kwargs) return super().resolve_expression(*args, **kwargs) def get_source_expressions(self): - if self.order_by.source_expressions: + if self.order_by is not None: return super().get_source_expressions() + [self.order_by] return super().get_source_expressions() @@ -24,6 +27,9 @@ class OrderableAggMixin: return super().set_source_expressions(exprs) def as_sql(self, compiler, connection): - order_by_sql, order_by_params = compiler.compile(self.order_by) + if self.order_by is not None: + order_by_sql, order_by_params = compiler.compile(self.order_by) + else: + order_by_sql, order_by_params = "", () sql, sql_params = super().as_sql(compiler, connection, ordering=order_by_sql) return sql, (*sql_params, *order_by_params)