[3.0.x] Fixed #31538 -- Fixed Meta.ordering validation lookups that are not transforms.

Regression in 440505cb2c.

Thanks Simon Meers for the report.
Backport of b73e66e758 from master
This commit is contained in:
Mariusz Felisiak 2020-05-05 09:08:29 +02:00
parent 883362b6a7
commit fdd5eb4309
3 changed files with 14 additions and 2 deletions

View File

@ -1719,7 +1719,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, "

View File

@ -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`).

View File

@ -844,6 +844,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