Skip to content

Commit

Permalink
Refs #23822 -- Made MigrationOptimizer aware of model managers
Browse files Browse the repository at this point in the history
  • Loading branch information
MarkusH authored and timgraham committed Jan 7, 2015
1 parent 127f9e0 commit 1f03d2d
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 22 deletions.
5 changes: 5 additions & 0 deletions django/db/migrations/optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ def reduce_model_create_rename(self, operation, other, in_between):
fields=operation.fields,
options=operation.options,
bases=operation.bases,
managers=operation.managers,
)
]

Expand Down Expand Up @@ -247,6 +248,7 @@ def reduce_create_model_add_field(self, operation, other, in_between):
fields=operation.fields + [(other.name, other.field)],
options=operation.options,
bases=operation.bases,
managers=operation.managers,
)
]

Expand All @@ -261,6 +263,7 @@ def reduce_create_model_alter_field(self, operation, other, in_between):
],
options=operation.options,
bases=operation.bases,
managers=operation.managers,
)
]

Expand All @@ -275,6 +278,7 @@ def reduce_create_model_rename_field(self, operation, other, in_between):
],
options=operation.options,
bases=operation.bases,
managers=operation.managers,
)
]

Expand All @@ -290,6 +294,7 @@ def reduce_create_model_remove_field(self, operation, other, in_between):
],
options=operation.options,
bases=operation.bases,
managers=operation.managers,
)
]

Expand Down
4 changes: 4 additions & 0 deletions tests/migrations/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ class UnmigratedModel(models.Model):
pass


class EmptyManager(models.Manager):
use_in_migrations = True


class FoodQuerySet(models.query.QuerySet):
pass

Expand Down
111 changes: 89 additions & 22 deletions tests/migrations/test_optimizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from django.db import migrations
from django.db import models

from .models import CustomModelBase, EmptyManager


class OptimizerTests(TestCase):
"""
Expand Down Expand Up @@ -55,13 +57,26 @@ def test_create_rename_model(self):
"""
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,
)
],
)

Expand Down Expand Up @@ -159,16 +174,29 @@ def test_create_model_add_field(self):
"""
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", [
("name", models.CharField(max_length=255)),
("age", models.IntegerField()),
]),
migrations.CreateModel(
name="Foo",
fields=[
("name", models.CharField(max_length=255)),
("age", models.IntegerField()),
],
options={'verbose_name': 'Foo'},
bases=(CustomModelBase),
managers=managers,
),
],
)

Expand Down Expand Up @@ -214,31 +242,57 @@ def test_create_model_alter_field(self):
"""
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", [
("name", models.IntegerField()),
]),
migrations.CreateModel(
name="Foo",
fields=[
("name", models.IntegerField()),
],
options={'verbose_name': 'Foo'},
bases=(CustomModelBase),
managers=managers,
),
],
)

def test_create_model_rename_field(self):
"""
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", [
("title", models.CharField(max_length=255)),
]),
migrations.CreateModel(
name="Foo",
fields=[
("title", models.CharField(max_length=255)),
],
options={'verbose_name': 'Foo'},
bases=(CustomModelBase),
managers=managers,
),
],
)

Expand Down Expand Up @@ -277,18 +331,31 @@ def test_create_model_remove_field(self):
"""
RemoveField should optimize into CreateModel.
"""
managers = [('objects', EmptyManager())]
self.assertOptimizesTo(
[
migrations.CreateModel("Foo", [
("name", models.CharField(max_length=255)),
("age", models.IntegerField()),
]),
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", [
("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,
),
],
)

Expand Down

0 comments on commit 1f03d2d

Please sign in to comment.