summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/base.py4
-rw-r--r--docs/releases/3.0.7.txt3
-rw-r--r--tests/invalid_models_tests/test_models.py9
3 files changed, 14 insertions, 2 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 6c9e9d3707..bc6f7d283e 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1747,7 +1747,9 @@ class Model(metaclass=ModelBase):
else:
_cls = None
except (FieldDoesNotExist, AttributeError):
- if fld is None or fld.get_transform(part) is None:
+ if fld is None or (
+ fld.get_transform(part) is None and fld.get_lookup(part) is None
+ ):
errors.append(
checks.Error(
"'ordering' refers to the nonexistent field, "
diff --git a/docs/releases/3.0.7.txt b/docs/releases/3.0.7.txt
index 6b204973be..9fc71d9aa2 100644
--- a/docs/releases/3.0.7.txt
+++ b/docs/releases/3.0.7.txt
@@ -9,4 +9,5 @@ Django 3.0.7 fixes several bugs in 3.0.6.
Bugfixes
========
-* ...
+* Fixed a regression in Django 3.0 by restoring the ability to use field
+ lookups in ``Meta.ordering`` (:ticket:`31538`).
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py
index 6bfdf2e736..5a1bb4cc7a 100644
--- a/tests/invalid_models_tests/test_models.py
+++ b/tests/invalid_models_tests/test_models.py
@@ -893,6 +893,15 @@ class OtherModelTests(SimpleTestCase):
with register_lookup(models.CharField, Lower):
self.assertEqual(Model.check(), [])
+ def test_ordering_pointing_to_lookup_not_transform(self):
+ class Model(models.Model):
+ test = models.CharField(max_length=100)
+
+ class Meta:
+ ordering = ('test__isnull',)
+
+ self.assertEqual(Model.check(), [])
+
def test_ordering_pointing_to_related_model_pk(self):
class Parent(models.Model):
pass