[1.5.x] Fixed #20207 -- Handle ManyToManyField with a unicode name correctly.

Backport of 216580e034.
This commit is contained in:
Simon Charette 2013-04-05 13:59:15 -04:00
parent a15a3e9148
commit d04e8f8c78
2 changed files with 5 additions and 2 deletions

View File

@ -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}, 'verbose_name_plural': '%(from)s-%(to)s relationships' % {'from': from_, 'to': to},
}) })
# Construct and return the new class. # Construct and return the new class.
return type(name, (models.Model,), { return type(str(name), (models.Model,), {
'Meta': meta, 'Meta': meta,
'__module__': klass.__module__, '__module__': klass.__module__,
from_: models.ForeignKey(klass, related_name='%s+' % name, db_tablespace=field.db_tablespace), from_: models.ForeignKey(klass, related_name='%s+' % name, db_tablespace=field.db_tablespace),

View File

@ -6,6 +6,7 @@ To define a many-to-many relationship, use ``ManyToManyField()``.
In this example, an ``Article`` can be published in multiple ``Publication`` In this example, an ``Article`` can be published in multiple ``Publication``
objects, and a ``Publication`` has multiple ``Article`` objects. objects, and a ``Publication`` has multiple ``Article`` objects.
""" """
from __future__ import unicode_literals
from django.db import models from django.db import models
from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import python_2_unicode_compatible
@ -24,7 +25,9 @@ class Publication(models.Model):
@python_2_unicode_compatible @python_2_unicode_compatible
class Article(models.Model): class Article(models.Model):
headline = models.CharField(max_length=100) 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): def __str__(self):
return self.headline return self.headline