Commit f317bd20 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.3.X] Fixed #16299 -- Ensure that unicode strings can be used to identify...

[1.3.X] Fixed #16299 -- Ensure that unicode strings can be used to identify classes in ForeignKey and ManyToManyFields. Unicode strings aren't actually legal as class names, but this is an issue if you use from __future__ import unicode_literals in your models.py file. Thanks to Martijn Bastiaan for the report, and Anthony Briggs for the final patch.

Backport of r16663 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.3.X@16675 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 38530700
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -390,7 +390,7 @@ class Options(object):
                    cache[obj] = model
        for klass in get_models(include_auto_created=True):
            for f in klass._meta.local_fields:
                if f.rel and not isinstance(f.rel.to, str) and self == f.rel.to._meta:
                if f.rel and not isinstance(f.rel.to, basestring) and self == f.rel.to._meta:
                    cache[RelatedObject(f.rel.to, klass, f)] = None
        self._related_objects_cache = cache

@@ -427,7 +427,7 @@ class Options(object):
                    cache[obj] = model
        for klass in get_models():
            for f in klass._meta.local_many_to_many:
                if f.rel and not isinstance(f.rel.to, str) and self == f.rel.to._meta:
                if f.rel and not isinstance(f.rel.to, basestring) and self == f.rel.to._meta:
                    cache[RelatedObject(f.rel.to, klass, f)] = None
        if app_cache_ready():
            self._related_many_to_many_cache = cache
+11 −0
Original line number Diff line number Diff line
#encoding=utf-8
"""
26. Invalid models

@@ -218,6 +219,16 @@ class InvalidSetNull(models.Model):
class InvalidSetDefault(models.Model):
    fk = models.ForeignKey('self', on_delete=models.SET_DEFAULT)

class UnicodeForeignKeys(models.Model):
    """Foreign keys which can translate to ascii should be OK, but fail if they're not."""
    good = models.ForeignKey(u'FKTarget')
    also_good = models.ManyToManyField(u'FKTarget', related_name='unicode2')

    # In Python 3 this should become legal, but currently causes unicode errors
    # when adding the errors in core/management/validation.py
    #bad = models.ForeignKey(u'★')


model_errors = """invalid_models.fielderrors: "charfield": CharFields require a "max_length" attribute that is a positive integer.
invalid_models.fielderrors: "charfield2": CharFields require a "max_length" attribute that is a positive integer.
invalid_models.fielderrors: "charfield3": CharFields require a "max_length" attribute that is a positive integer.