summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-09-26 10:33:54 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-09-27 13:57:22 +0200
commitc7944628a1979453468d67818c63957532d396d8 (patch)
tree6cf7fc23d5e5d244662048b785e127ea716cbde3
parentc2678e49759e5c4c329bff0eeca2886267005d21 (diff)
downloaddjango-c7944628a1979453468d67818c63957532d396d8.tar.gz
Refs #30798 -- Prevented chaining fields from the same related model multiple times in model Meta.ordering.
-rw-r--r--django/db/models/base.py2
-rw-r--r--tests/invalid_models_tests/test_models.py20
2 files changed, 22 insertions, 0 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 3ce711f3f1..fe3d84677a 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1711,6 +1711,8 @@ class Model(metaclass=ModelBase):
fld = _cls._meta.get_field(part)
if fld.is_relation:
_cls = fld.get_path_info()[-1].to_opts.model
+ else:
+ _cls = None
except (FieldDoesNotExist, AttributeError):
if fld is None or fld.get_transform(part) is None:
errors.append(
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py
index 0f1d1e4dc3..02db3ea54a 100644
--- a/tests/invalid_models_tests/test_models.py
+++ b/tests/invalid_models_tests/test_models.py
@@ -814,6 +814,26 @@ class OtherModelTests(SimpleTestCase):
)
])
+ def test_ordering_pointing_multiple_times_to_model_fields(self):
+ class Parent(models.Model):
+ field1 = models.CharField(max_length=100)
+ field2 = models.CharField(max_length=100)
+
+ class Child(models.Model):
+ parent = models.ForeignKey(Parent, models.CASCADE)
+
+ class Meta:
+ ordering = ('parent__field1__field2',)
+
+ self.assertEqual(Child.check(), [
+ Error(
+ "'ordering' refers to the nonexistent field, related field, "
+ "or lookup 'parent__field1__field2'.",
+ obj=Child,
+ id='models.E015',
+ )
+ ])
+
def test_ordering_allows_registered_lookups(self):
class Model(models.Model):
test = models.CharField(max_length=100)