diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-09-27 12:16:26 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-09-27 14:52:08 +0200 |
| commit | 0dc39ca8677347ecf25aebd056a130cdbfb8df21 (patch) | |
| tree | 05ae3990a530ee7b00372b933e2c621b13c2ebbb | |
| parent | da8f85aa82a8810cac8c0225c1f8862e5d9aea64 (diff) | |
[3.0.x] Fixed #30798 -- Fixed Meta.ordering validation for pk of related fields.
Regression in 440505cb2cadbe1a5b9fba246bcde6c04f51d07e.
Backport of 95a11578ce41de1e152fe7d173f109e280aebd6d from master
| -rw-r--r-- | django/db/models/base.py | 6 | ||||
| -rw-r--r-- | tests/invalid_models_tests/test_models.py | 12 |
2 files changed, 17 insertions, 1 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index fe3d84677a..0b8425aa85 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -1708,7 +1708,11 @@ class Model(metaclass=ModelBase): fld = None for part in field.split(LOOKUP_SEP): 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: _cls = fld.get_path_info()[-1].to_opts.model else: diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py index 02db3ea54a..60b89b6f2e 100644 --- a/tests/invalid_models_tests/test_models.py +++ b/tests/invalid_models_tests/test_models.py @@ -844,6 +844,18 @@ class OtherModelTests(SimpleTestCase): with register_lookup(models.CharField, Lower): 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): class Parent(models.Model): pass |
