Commit da9cf53c authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #22564 -- Prevented unneeded bytestrings in migrations

In some cases, this could lead to migrations written with Python 2
being incompatible with Python 3.
Thanks Tim Graham for the report and Loïc Bistuer for the advices.
parent 12474dac
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ from django.db import models
from django.db.models.options import DEFAULT_NAMES, normalize_together
from django.db.models.fields.related import do_pending_lookups
from django.utils import six
from django.utils.encoding import force_text
from django.utils.module_loading import import_string


@@ -132,7 +133,7 @@ class ModelState(object):

    def __init__(self, app_label, name, fields, options=None, bases=None):
        self.app_label = app_label
        self.name = name
        self.name = force_text(name)
        self.fields = fields
        self.options = options or {}
        self.bases = bases or (models.Model, )
+2 −0
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ class MigrationWriter(object):
                dependencies.append("        migrations.swappable_dependency(settings.%s)," % dependency[1])
                imports.add("from django.conf import settings")
            else:
                # No need to output bytestrings for dependencies
                dependency = tuple([force_text(s) for s in dependency])
                dependencies.append("        %s," % self.serialize(dependency)[0])
        items["dependencies"] = "\n".join(dependencies) + "\n" if dependencies else ""

+1 −1
Original line number Diff line number Diff line
@@ -370,7 +370,7 @@ class Field(RegisterLookupMixin):
            path = path.replace("django.db.models.fields", "django.db.models")
        # Return basic info - other fields should override this.
        return (
            self.name,
            force_text(self.name, strings_only=True),
            path,
            [],
            keywords,
+6 −3
Original line number Diff line number Diff line
import warnings
from django.test import TestCase, override_settings

from django.db import models
from django.test import TestCase, override_settings
from django.utils import six


class FieldDeconstructionTests(TestCase):
@@ -15,14 +17,15 @@ class FieldDeconstructionTests(TestCase):
        # First try using a "normal" field
        field = models.CharField(max_length=65)
        name, path, args, kwargs = field.deconstruct()
        self.assertEqual(name, None)
        self.assertIsNone(name)
        field.set_attributes_from_name("is_awesome_test")
        name, path, args, kwargs = field.deconstruct()
        self.assertEqual(name, "is_awesome_test")
        self.assertIsInstance(name, six.text_type)
        # Now try with a ForeignKey
        field = models.ForeignKey("some_fake.ModelName")
        name, path, args, kwargs = field.deconstruct()
        self.assertEqual(name, None)
        self.assertIsNone(name)
        field.set_attributes_from_name("author")
        name, path, args, kwargs = field.deconstruct()
        self.assertEqual(name, "author")