From 216580e03499e035b93283df00fcc03b346fef7b Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Fri, 5 Apr 2013 13:59:15 -0400 Subject: [PATCH] Fixed #20207 -- Handle ManyToManyField with a unicode name correctly. --- django/db/models/fields/related.py | 2 +- tests/many_to_many/models.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 677a4707a0..e85b3301bf 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -1327,7 +1327,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, db_constraint=field.rel.db_constraint), diff --git a/tests/many_to_many/models.py b/tests/many_to_many/models.py index a196c85092..31793b3974 100644 --- a/tests/many_to_many/models.py +++ b/tests/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