diff options
Diffstat (limited to 'django/db/models/sql/query.py')
| -rw-r--r-- | django/db/models/sql/query.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 8be560856b..45192b7809 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -2376,14 +2376,15 @@ class Query(BaseExpression): return True # Don't pollute the original query (might disrupt joins). q = self.clone() - order_by_set = { - ( - order_by.resolve_expression(q) - if hasattr(order_by, "resolve_expression") - else F(order_by).resolve_expression(q) - ) - for order_by in q.order_by - } + order_by_set = set() + for order_by in q.order_by: + if hasattr(order_by, "resolve_expression"): + order_by_set.add(order_by.resolve_expression(q)) + elif order_by == "?": + # Random ordering can't be compared against group by. + return False + else: + order_by_set.add(F(order_by.removeprefix("-")).resolve_expression(q)) return order_by_set.issubset(self.group_by) def clear_ordering(self, force=False, clear_default=True): |
