summaryrefslogtreecommitdiff
path: root/tests/invalid_models_tests/test_relative_fields.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/invalid_models_tests/test_relative_fields.py')
-rw-r--r--tests/invalid_models_tests/test_relative_fields.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py
index 4ac0c547a9..786573672f 100644
--- a/tests/invalid_models_tests/test_relative_fields.py
+++ b/tests/invalid_models_tests/test_relative_fields.py
@@ -1291,6 +1291,33 @@ class ComplexClashTests(SimpleTestCase):
),
])
+ def test_clash_parent_link(self):
+ class Parent(models.Model):
+ pass
+
+ class Child(Parent):
+ other_parent = models.OneToOneField(Parent, models.CASCADE)
+
+ errors = [
+ ('fields.E304', 'accessor', 'parent_ptr', 'other_parent'),
+ ('fields.E305', 'query name', 'parent_ptr', 'other_parent'),
+ ('fields.E304', 'accessor', 'other_parent', 'parent_ptr'),
+ ('fields.E305', 'query name', 'other_parent', 'parent_ptr'),
+ ]
+ self.assertEqual(Child.check(), [
+ Error(
+ "Reverse %s for 'Child.%s' clashes with reverse %s for "
+ "'Child.%s'." % (attr, field_name, attr, clash_name),
+ hint=(
+ "Add or change a related_name argument to the definition "
+ "for 'Child.%s' or 'Child.%s'." % (field_name, clash_name)
+ ),
+ obj=Child._meta.get_field(field_name),
+ id=error_id,
+ )
+ for error_id, attr, field_name, clash_name in errors
+ ])
+
@isolate_apps('invalid_models_tests')
class M2mThroughFieldsTests(SimpleTestCase):