diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 95c865df22..2ac4b470b7 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -1172,7 +1172,7 @@ def create_many_to_many_intermediary_model(field, klass): 'verbose_name_plural': '%(from)s-%(to)s relationships' % {'from': from_, 'to': to}, }) # Construct and return the new class. - return type(name, (models.Model,), { + return type(str(name), (models.Model,), { 'Meta': meta, '__module__': klass.__module__, from_: models.ForeignKey(klass, related_name='%s+' % name, db_tablespace=field.db_tablespace), diff --git a/tests/modeltests/many_to_many/models.py b/tests/modeltests/many_to_many/models.py index a196c85092..31793b3974 100644 --- a/tests/modeltests/many_to_many/models.py +++ b/tests/modeltests/many_to_many/models.py @@ -6,6 +6,7 @@ To define a many-to-many relationship, use ``ManyToManyField()``. In this example, an ``Article`` can be published in multiple ``Publication`` objects, and a ``Publication`` has multiple ``Article`` objects. """ +from __future__ import unicode_literals from django.db import models from django.utils.encoding import python_2_unicode_compatible @@ -24,7 +25,9 @@ class Publication(models.Model): @python_2_unicode_compatible class Article(models.Model): headline = models.CharField(max_length=100) - publications = models.ManyToManyField(Publication) + # Assign a unicode string as name to make sure the intermediary model is + # correctly created. Refs #20207 + publications = models.ManyToManyField(Publication, name='publications') def __str__(self): return self.headline