summaryrefslogtreecommitdiff
path: root/django/db/models/sql/compiler.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql/compiler.py')
-rw-r--r--django/db/models/sql/compiler.py25
1 files changed, 22 insertions, 3 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index f08082c88a..aa9ffc7b0e 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -14,7 +14,9 @@ from django.db.models.sql.constants import (
from django.db.models.sql.query import Query, get_order_dir
from django.db.transaction import TransactionManagementError
from django.db.utils import DatabaseError, NotSupportedError
-from django.utils.deprecation import RemovedInDjango30Warning
+from django.utils.deprecation import (
+ RemovedInDjango30Warning, RemovedInDjango31Warning,
+)
from django.utils.inspect import func_supports_parameter
FORCE = object()
@@ -34,6 +36,7 @@ class SQLCompiler:
self.annotation_col_map = None
self.klass_info = None
self.ordering_parts = re.compile(r'(.*)\s(ASC|DESC)(.*)')
+ self._meta_ordering = None
def setup_query(self):
if all(self.query.alias_refcount[a] == 0 for a in self.query.alias_map):
@@ -266,8 +269,13 @@ class SQLCompiler:
ordering = self.query.extra_order_by
elif not self.query.default_ordering:
ordering = self.query.order_by
+ elif self.query.order_by:
+ ordering = self.query.order_by
+ elif self.query.get_meta().ordering:
+ ordering = self.query.get_meta().ordering
+ self._meta_ordering = ordering
else:
- ordering = (self.query.order_by or self.query.get_meta().ordering or [])
+ ordering = []
if self.query.standard_ordering:
asc, desc = ORDER_DIR['ASC']
else:
@@ -536,7 +544,18 @@ class SQLCompiler:
raise NotImplementedError('annotate() + distinct(fields) is not implemented.')
order_by = order_by or self.connection.ops.force_no_ordering()
result.append('GROUP BY %s' % ', '.join(grouping))
-
+ if self._meta_ordering:
+ # When the deprecation ends, replace with:
+ # order_by = None
+ warnings.warn(
+ "%s QuerySet won't use Meta.ordering in Django 3.1. "
+ "Add .order_by('%s') to retain the current query." % (
+ self.query.model.__name__,
+ "', '".join(self._meta_ordering)
+ ),
+ RemovedInDjango31Warning,
+ stacklevel=4,
+ )
if having:
result.append('HAVING %s' % having)
params.extend(h_params)