Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #21375 -- related_name='+' clashed with other '+' names

  • Loading branch information...
commit 9f76ea1eaad0db0183fa3b5bade16392db0cafbd 1 parent 18c642b
@akaariai akaariai authored
View
2  django/core/management/validation.py
@@ -309,7 +309,7 @@ def get_validation_errors(outfile, app=None):
# occurs for symmetrical m2m relations to self). If this is the
# case, there are no clashes to check for this field, as there are
# no reverse descriptors for this field.
- if rel_name is not None:
+ if not f.rel.is_hidden():
for r in rel_opts.fields:
if r.name == rel_name:
e.add(opts, "Accessor for m2m field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
View
21 tests/model_validation/models.py
@@ -25,3 +25,24 @@ class ThingWithIterableChoices(models.Model):
# Testing choices= Iterable of Iterables
# See: https://code.djangoproject.com/ticket/20430
thing = models.CharField(max_length=100, blank=True, choices=Things())
+
+ class Meta:
+ # Models created as unmanaged as these aren't ever queried
+ managed = False
+
+
+class ManyToManyRel(models.Model):
+ thing1 = models.ManyToManyField(ThingWithIterableChoices, related_name='+')
+ thing2 = models.ManyToManyField(ThingWithIterableChoices, related_name='+')
+
+ class Meta:
+ # Models created as unmanaged as these aren't ever queried
+ managed = False
+
+class FKRel(models.Model):
+ thing1 = models.ForeignKey(ThingWithIterableChoices, related_name='+')
+ thing2 = models.ForeignKey(ThingWithIterableChoices, related_name='+')
+
+ class Meta:
+ # Models created as unmanaged as these aren't ever queried
+ managed = False
View
2  tests/model_validation/tests.py
@@ -10,4 +10,6 @@ def test_models_validate(self):
# Validation Tests:
# * choices= Iterable of Iterables
# See: https://code.djangoproject.com/ticket/20430
+ # * related_name='+' doesn't clash with another '+'
+ # See: https://code.djangoproject.com/ticket/21375
management.call_command("validate", stdout=six.StringIO())
Please sign in to comment.
Something went wrong with that request. Please try again.