diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-05-05 09:08:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-05 09:08:29 +0200 |
| commit | b73e66e75802f10cc34d4880714554cea54dbf49 (patch) | |
| tree | 34ba3bcd57d02535c72731c4ab67ae8f584cc1eb | |
| parent | d2b9a9fdbbc9b5e19b22b144d3e305b87c03b6c8 (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.py | 4 | ||||
| -rw-r--r-- | docs/releases/3.0.7.txt | 3 | ||||
| -rw-r--r-- | tests/invalid_models_tests/test_models.py | 9 |
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 |
