summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruchit2801 <vithaniruchit@gmail.com>2019-05-17 13:00:57 +0530
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-05-18 19:29:00 +0200
commit04042b2b440f0bf50eb908d52cfe76af430e1738 (patch)
tree65dcb4110c7da75f8589b8c3f714a5e859335e6d
parente86cc14bd36734d81c4e490a2453778e33b95a45 (diff)
Fixed #30463 -- Fixed crash of deprecation message when Meta.ordering contains expressions.
Regression in 1b1f64ee5a78cc217fead52cbae23114502cf564.
-rw-r--r--django/db/models/sql/compiler.py4
-rw-r--r--docs/releases/2.2.2.txt3
-rw-r--r--tests/ordering/models.py8
-rw-r--r--tests/ordering/tests.py4
4 files changed, 15 insertions, 4 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index 23bc339e78..aea3ec8d5e 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -553,9 +553,9 @@ class SQLCompiler:
# 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." % (
+ "Add .order_by(%s) to retain the current query." % (
self.query.model.__name__,
- "', '".join(self._meta_ordering)
+ ', '.join(repr(f) for f in self._meta_ordering),
),
RemovedInDjango31Warning,
stacklevel=4,
diff --git a/docs/releases/2.2.2.txt b/docs/releases/2.2.2.txt
index 928624a753..377abaa3c0 100644
--- a/docs/releases/2.2.2.txt
+++ b/docs/releases/2.2.2.txt
@@ -11,3 +11,6 @@ Bugfixes
* Fixed a regression in Django 2.2 that stopped Show/Hide toggles working on
dynamically added admin inlines (:ticket:`30459`).
+
+* Fixed a regression in Django 2.2 where deprecation message crashes if
+ ``Meta.ordering`` contains an expression (:ticket:`30463`).
diff --git a/tests/ordering/models.py b/tests/ordering/models.py
index 85e8c59bb6..8b71983c44 100644
--- a/tests/ordering/models.py
+++ b/tests/ordering/models.py
@@ -14,6 +14,7 @@ undefined -- not random, just undefined.
"""
from django.db import models
+from django.db.models.expressions import OrderBy
class Author(models.Model):
@@ -30,7 +31,12 @@ class Article(models.Model):
pub_date = models.DateTimeField()
class Meta:
- ordering = ('-pub_date', 'headline')
+ ordering = (
+ '-pub_date',
+ 'headline',
+ models.F('author__name').asc(),
+ OrderBy(models.F('second_author__name')),
+ )
def __str__(self):
return self.headline
diff --git a/tests/ordering/tests.py b/tests/ordering/tests.py
index 16e5cc9b2d..f0c4bba999 100644
--- a/tests/ordering/tests.py
+++ b/tests/ordering/tests.py
@@ -408,7 +408,9 @@ class OrderingTests(TestCase):
def test_deprecated_values_annotate(self):
msg = (
"Article QuerySet won't use Meta.ordering in Django 3.1. Add "
- ".order_by('-pub_date', 'headline') to retain the current query."
+ ".order_by('-pub_date', 'headline', OrderBy(F(author__name), "
+ "descending=False), OrderBy(F(second_author__name), "
+ "descending=False)) to retain the current query."
)
with self.assertRaisesMessage(RemovedInDjango31Warning, msg):
list(Article.objects.values('author').annotate(Count('headline')))