From 4eb38f6994f233feeac5852cbee2ae6663a9b1ef Mon Sep 17 00:00:00 2001 From: Clifford Gama Date: Tue, 10 Mar 2026 17:47:18 +0200 Subject: [6.0.x] Fixed #36973 -- Made fields.E348 check detect further clashes between managers and related_names. Clashes were only detected for self-referential relationships, i.e. ForeignKey("self"). Refs #22977. Bug in 6888375c53476011754f778deabc6cdbfa327011. Thanks JaeHyuckSa for the thorough review! Backport of fcf916884d25ed430bd7cedaea2b10035c2aa3b6 from main. --- tests/invalid_models_tests/test_relative_fields.py | 32 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/invalid_models_tests/test_relative_fields.py b/tests/invalid_models_tests/test_relative_fields.py index ed6d39f7c6..f1ecd178f1 100644 --- a/tests/invalid_models_tests/test_relative_fields.py +++ b/tests/invalid_models_tests/test_relative_fields.py @@ -1555,11 +1555,12 @@ class RelatedQueryNameClashWithManagerTests(SimpleTestCase): Author.check(), [ Error( - "Related name 'authors' for 'Author.mentor' clashes with the name " - "of a model manager.", + "Related name 'authors' for 'invalid_models_tests.Author.mentor' " + "clashes with the name of a model manager.", hint=( "Rename the model manager or change the related_name argument " - "in the definition for field 'Author.mentor'." + "in the definition for field " + "'invalid_models_tests.Author.mentor'." ), obj=Author._meta.get_field("mentor"), id="fields.E348", @@ -1567,6 +1568,31 @@ class RelatedQueryNameClashWithManagerTests(SimpleTestCase): ], ) + def test_clash_between_rel_name_and_manager_non_self_referential(self): + class Thing(models.Model): + items = models.Manager() + + class Item(models.Model): + thing = models.ForeignKey(Thing, models.CASCADE, related_name="items") + something = models.ForeignKey(Thing, models.CASCADE, related_name="+") + + self.assertEqual( + Item.check(), + [ + Error( + "Related name 'items' for 'invalid_models_tests.Item.thing' " + "clashes with the name of a model manager.", + hint=( + "Rename the model manager or change the related_name argument " + "in the definition for field 'invalid_models_tests.Item.thing'." + ), + obj=Item._meta.get_field("thing"), + id="fields.E348", + ) + ], + ) + self.assertEqual(Thing.check(), []) + @isolate_apps("invalid_models_tests") class SelfReferentialM2MClashTests(SimpleTestCase): -- cgit v1.3