summaryrefslogtreecommitdiff
path: root/django/db/models/sql/query.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql/query.py')
-rw-r--r--django/db/models/sql/query.py17
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):