summaryrefslogtreecommitdiff
path: root/django/db/models/fields/related.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/fields/related.py')
-rw-r--r--django/db/models/fields/related.py40
1 files changed, 18 insertions, 22 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index f1bc664007..332a168a78 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -348,6 +348,24 @@ class RelatedField(FieldCacheMixin, Field):
)
)
+ # Check clash between reverse accessor and manager names on
+ # the target model.
+ if not rel_is_hidden:
+ manager_names = {m.name for m in rel_opts.managers}
+ if rel_name in manager_names:
+ errors.append(
+ checks.Error(
+ f"Related name '{rel_name}' for '{field_name}' "
+ f"clashes with the name of a model manager.",
+ hint=(
+ "Rename the model manager or change the related_name "
+ "argument in the definition for field '%s'." % field_name
+ ),
+ obj=self,
+ id="fields.E348",
+ )
+ )
+
return errors
def db_type(self, connection):
@@ -589,7 +607,6 @@ class ForeignObject(RelatedField):
*self._check_to_fields_exist(),
*self._check_to_fields_composite_pk(),
*self._check_unique_target(),
- *self._check_conflict_with_managers(),
]
def _check_to_fields_exist(self):
@@ -719,27 +736,6 @@ class ForeignObject(RelatedField):
]
return []
- def _check_conflict_with_managers(self):
- errors = []
- manager_names = {manager.name for manager in self.opts.managers}
- for rel_objs in self.model._meta.related_objects:
- related_object_name = rel_objs.name
- if related_object_name in manager_names:
- field_name = f"{self.model._meta.object_name}.{self.name}"
- errors.append(
- checks.Error(
- f"Related name '{related_object_name}' for '{field_name}' "
- "clashes with the name of a model manager.",
- hint=(
- "Rename the model manager or change the related_name "
- f"argument in the definition for field '{field_name}'."
- ),
- obj=self,
- id="fields.E348",
- )
- )
- return errors
-
def deconstruct(self):
name, path, args, kwargs = super().deconstruct()
kwargs["on_delete"] = self.remote_field.on_delete