Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Make ManyToManyField model references more robust.

In r16679 a test was added to verify something had been fixed when a
unicode string type was passed in as a model name. The name has to be
ASCII convertible, but in Python 2.6 and earlier, it must also have str
type.

This commit fixes the problem for earlier Python versions and is almost
identical to a patch from b.leskes in #6045.

Fixes #16689. Refs #6045.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16682 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 587fbff3dd500cd3444dc7a0717e541307ff869d 1 parent 2047305
@malcolmt malcolmt authored
Showing with 4 additions and 0 deletions.
  1. +4 −0 django/db/models/fields/related.py
View
4 django/db/models/fields/related.py
@@ -1007,6 +1007,10 @@ def __init__(self, to, **kwargs):
assert not to._meta.abstract, "%s cannot define a relation with abstract class %s" % (self.__class__.__name__, to._meta.object_name)
except AttributeError: # to._meta doesn't exist, so it must be RECURSIVE_RELATIONSHIP_CONSTANT
assert isinstance(to, basestring), "%s(%r) is invalid. First parameter to ManyToManyField must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)
+ # Python 2.6 and earlier require dictionary keys to be of str type,
+ # not unicode and class names must be ASCII (in Python 2.x), so we
+ # forcibly coerce it here (breaks early if there's a problem).
+ to = str(to)
kwargs['verbose_name'] = kwargs.get('verbose_name', None)
kwargs['rel'] = ManyToManyRel(to,
Please sign in to comment.
Something went wrong with that request. Please try again.