summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-09-27 12:16:26 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-09-27 14:22:31 +0200
commit95a11578ce41de1e152fe7d173f109e280aebd6d (patch)
treecb028ad12c6bd88660285a81b94b8839b07d580b
parentc7944628a1979453468d67818c63957532d396d8 (diff)
Fixed #30798 -- Fixed Meta.ordering validation for pk of related fields.
Regression in 440505cb2cadbe1a5b9fba246bcde6c04f51d07e.
-rw-r--r--django/db/models/base.py6
-rw-r--r--tests/invalid_models_tests/test_models.py12
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