diff --git a/django_mongodb/compiler.py b/django_mongodb/compiler.py index 38ed109e1..d975e4446 100644 --- a/django_mongodb/compiler.py +++ b/django_mongodb/compiler.py @@ -469,10 +469,10 @@ def _get_ordering(self): idx = itertools.count(start=1) for order in self.order_by_objs or []: if isinstance(order.expression, Col): - field_name = order.expression.as_mql(self, self.connection).removeprefix("$") + field_name = order.as_mql(self, self.connection).removeprefix("$") fields.append((order.expression.target.column, order.expression)) elif isinstance(order.expression, Ref): - field_name = order.expression.as_mql(self, self.connection).removeprefix("$") + field_name = order.as_mql(self, self.connection).removeprefix("$") else: field_name = f"__order{next(idx)}" fields.append((field_name, order.expression)) diff --git a/django_mongodb/expressions.py b/django_mongodb/expressions.py index 3b2eea2d4..d175a132a 100644 --- a/django_mongodb/expressions.py +++ b/django_mongodb/expressions.py @@ -12,6 +12,7 @@ ExpressionWrapper, F, NegatedExpression, + OrderBy, Ref, ResolvedOuterRef, Star, @@ -73,6 +74,10 @@ def negated_expression(self, compiler, connection): return {"$not": expression_wrapper(self, compiler, connection)} +def order_by(self, compiler, connection): + return self.expression.as_mql(compiler, connection) + + def query(self, compiler, connection): # noqa: ARG001 raise NotSupportedError("Using a QuerySet in annotate() is not supported on MongoDB.") @@ -123,6 +128,7 @@ def register_expressions(): ExpressionWrapper.as_mql = expression_wrapper F.as_mql = f NegatedExpression.as_mql = negated_expression + OrderBy.as_mql = order_by Query.as_mql = query Ref.as_mql = ref ResolvedOuterRef.as_mql = ResolvedOuterRef.as_sql