Kaydet (Commit) d04e7302 authored tarafından Vincent-Vega's avatar Vincent-Vega Kaydeden (comit) Simon Charette

Fixed #22711 -- Adjusted ordering checks to allow implicit relation fields.

refs #19195.
üst 7a38f889
......@@ -1357,7 +1357,7 @@ class Model(six.with_metaclass(ModelBase)):
@classmethod
def _check_ordering(cls):
""" Check "ordering" option -- is it a list of lists and do all fields
""" Check "ordering" option -- is it a list of strings and do all fields
exist? """
from django.db.models import FieldDoesNotExist
......@@ -1401,6 +1401,14 @@ class Model(six.with_metaclass(ModelBase)):
try:
cls._meta.get_field(field_name, many_to_many=False)
except FieldDoesNotExist:
if field_name.endswith('_id'):
try:
field = cls._meta.get_field(field_name[:-3], many_to_many=False)
except FieldDoesNotExist:
pass
else:
if field.attname == field_name:
continue
errors.append(
checks.Error(
"'ordering' refers to the non-existent field '%s'." % field_name,
......
......@@ -415,6 +415,40 @@ class OtherModelTests(IsolatedModelsTestCase):
]
self.assertEqual(errors, expected)
def test_ordering_pointing_to_missing_foreignkey_field(self):
# refs #22711
class Model(models.Model):
missing_fk_field = models.IntegerField()
class Meta:
ordering = ("missing_fk_field_id",)
errors = Model.check()
expected = [
Error(
"'ordering' refers to the non-existent field 'missing_fk_field_id'.",
hint=None,
obj=Model,
id='models.E015',
)
]
self.assertEqual(errors, expected)
def test_ordering_pointing_to_existing_foreignkey_field(self):
# refs #22711
class Parent(models.Model):
pass
class Child(models.Model):
parent = models.ForeignKey(Parent)
class Meta:
ordering = ("parent_id",)
self.assertFalse(Child.check())
@override_settings(TEST_SWAPPED_MODEL_BAD_VALUE='not-a-model')
def test_swappable_missing_app_name(self):
class Model(models.Model):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment