Browse Source

Fixed #20207 -- Handle ManyToManyField with a unicode name correctly.

Simon Charette 12 years ago
parent
commit
216580e034
2 changed files with 5 additions and 2 deletions
  1. 1 1
      django/db/models/fields/related.py
  2. 4 1
      tests/many_to_many/models.py

+ 1 - 1
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),

+ 4 - 1
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