[3.0.x] Fixed #30798 -- Fixed Meta.ordering validation for pk of related fields.

Regression in 440505cb2c.

Backport of 95a11578ce from master
This commit is contained in:
Hasan Ramezani 2019-09-27 12:16:26 +02:00 committed by Mariusz Felisiak
parent da8f85aa82
commit 0dc39ca867
2 changed files with 17 additions and 1 deletions

View File

@ -1708,7 +1708,11 @@ class Model(metaclass=ModelBase):
fld = None fld = None
for part in field.split(LOOKUP_SEP): for part in field.split(LOOKUP_SEP):
try: try:
fld = _cls._meta.get_field(part) # pk is an alias that won't be found by opts.get_field.
if part == 'pk':
fld = _cls._meta.pk
else:
fld = _cls._meta.get_field(part)
if fld.is_relation: if fld.is_relation:
_cls = fld.get_path_info()[-1].to_opts.model _cls = fld.get_path_info()[-1].to_opts.model
else: else:

View File

@ -844,6 +844,18 @@ class OtherModelTests(SimpleTestCase):
with register_lookup(models.CharField, Lower): with register_lookup(models.CharField, Lower):
self.assertEqual(Model.check(), []) self.assertEqual(Model.check(), [])
def test_ordering_pointing_to_related_model_pk(self):
class Parent(models.Model):
pass
class Child(models.Model):
parent = models.ForeignKey(Parent, models.CASCADE)
class Meta:
ordering = ('parent__pk',)
self.assertEqual(Child.check(), [])
def test_ordering_pointing_to_foreignkey_field(self): def test_ordering_pointing_to_foreignkey_field(self):
class Parent(models.Model): class Parent(models.Model):
pass pass