summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2020-05-05 09:08:29 +0200
committerGitHub <noreply@github.com>2020-05-05 09:08:29 +0200
commitb73e66e75802f10cc34d4880714554cea54dbf49 (patch)
tree34ba3bcd57d02535c72731c4ab67ae8f584cc1eb
parentd2b9a9fdbbc9b5e19b22b144d3e305b87c03b6c8 (diff)
Fixed #31538 -- Fixed Meta.ordering validation lookups that are not transforms.
Regression in 440505cb2cadbe1a5b9fba246bcde6c04f51d07e. Thanks Simon Meers for the report.
-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