Commit 1f03d2d9 authored by Markus Holtermann's avatar Markus Holtermann Committed by Tim Graham
Browse files

Refs #23822 -- Made MigrationOptimizer aware of model managers

parent 127f9e07
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -211,6 +211,7 @@ class MigrationOptimizer(object):
                    fields=operation.fields,
                    options=operation.options,
                    bases=operation.bases,
                    managers=operation.managers,
                )
            ]

@@ -247,6 +248,7 @@ class MigrationOptimizer(object):
                    fields=operation.fields + [(other.name, other.field)],
                    options=operation.options,
                    bases=operation.bases,
                    managers=operation.managers,
                )
            ]

@@ -261,6 +263,7 @@ class MigrationOptimizer(object):
                    ],
                    options=operation.options,
                    bases=operation.bases,
                    managers=operation.managers,
                )
            ]

@@ -275,6 +278,7 @@ class MigrationOptimizer(object):
                    ],
                    options=operation.options,
                    bases=operation.bases,
                    managers=operation.managers,
                )
            ]

@@ -290,6 +294,7 @@ class MigrationOptimizer(object):
                    ],
                    options=operation.options,
                    bases=operation.bases,
                    managers=operation.managers,
                )
            ]

+4 −0
Original line number Diff line number Diff line
@@ -52,6 +52,10 @@ class UnmigratedModel(models.Model):
    pass


class EmptyManager(models.Manager):
    use_in_migrations = True


class FoodQuerySet(models.query.QuerySet):
    pass

+89 −22
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@ from django.db.migrations.optimizer import MigrationOptimizer
from django.db import migrations
from django.db import models

from .models import CustomModelBase, EmptyManager


class OptimizerTests(TestCase):
    """
@@ -55,13 +57,26 @@ class OptimizerTests(TestCase):
        """
        CreateModel should absorb RenameModels.
        """
        managers = [('objects', EmptyManager())]
        self.assertOptimizesTo(
            [
                migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel(
                    name="Foo",
                    fields=[("name", models.CharField(max_length=255))],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
                migrations.RenameModel("Foo", "Bar"),
            ],
            [
                migrations.CreateModel("Bar", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel(
                    "Bar",
                    [("name", models.CharField(max_length=255))],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                )
            ],
        )

@@ -159,16 +174,29 @@ class OptimizerTests(TestCase):
        """
        AddField should optimize into CreateModel.
        """
        managers = [('objects', EmptyManager())]
        self.assertOptimizesTo(
            [
                migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel(
                    name="Foo",
                    fields=[("name", models.CharField(max_length=255))],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
                migrations.AddField("Foo", "age", models.IntegerField()),
            ],
            [
                migrations.CreateModel("Foo", [
                migrations.CreateModel(
                    name="Foo",
                    fields=[
                        ("name", models.CharField(max_length=255)),
                        ("age", models.IntegerField()),
                ]),
                    ],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
            ],
        )

@@ -214,15 +242,28 @@ class OptimizerTests(TestCase):
        """
        AlterField should optimize into CreateModel.
        """
        managers = [('objects', EmptyManager())]
        self.assertOptimizesTo(
            [
                migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel(
                    name="Foo",
                    fields=[("name", models.CharField(max_length=255))],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
                migrations.AlterField("Foo", "name", models.IntegerField()),
            ],
            [
                migrations.CreateModel("Foo", [
                migrations.CreateModel(
                    name="Foo",
                    fields=[
                        ("name", models.IntegerField()),
                ]),
                    ],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
            ],
        )

@@ -230,15 +271,28 @@ class OptimizerTests(TestCase):
        """
        RenameField should optimize into CreateModel.
        """
        managers = [('objects', EmptyManager())]
        self.assertOptimizesTo(
            [
                migrations.CreateModel("Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel(
                    name="Foo",
                    fields=[("name", models.CharField(max_length=255))],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
                migrations.RenameField("Foo", "name", "title"),
            ],
            [
                migrations.CreateModel("Foo", [
                migrations.CreateModel(
                    name="Foo",
                    fields=[
                        ("title", models.CharField(max_length=255)),
                ]),
                    ],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
            ],
        )

@@ -277,18 +331,31 @@ class OptimizerTests(TestCase):
        """
        RemoveField should optimize into CreateModel.
        """
        managers = [('objects', EmptyManager())]
        self.assertOptimizesTo(
            [
                migrations.CreateModel("Foo", [
                migrations.CreateModel(
                    name="Foo",
                    fields=[
                        ("name", models.CharField(max_length=255)),
                        ("age", models.IntegerField()),
                ]),
                    ],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
                migrations.RemoveField("Foo", "age"),
            ],
            [
                migrations.CreateModel("Foo", [
                migrations.CreateModel(
                    name="Foo",
                    fields=[
                        ("name", models.CharField(max_length=255)),
                ]),
                    ],
                    options={'verbose_name': 'Foo'},
                    bases=(CustomModelBase),
                    managers=managers,
                ),
            ],
        )