mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #27731 -- Implemented CreateModel/AlterFooOperation reduction.
This should alleviate the side effects of disabling the AlterFooOperation reduction with RemoveField to fix refs #28862 during migration squashing because CreateModel can perform a reduction with RemoveField. Thanks Nick Pope for the review.
This commit is contained in:
committed by
Tim Graham
parent
ed7898e1b5
commit
8e3f22f251
@@ -594,8 +594,11 @@ class OptimizerTests(SimpleTestCase):
|
||||
def _test_create_alter_foo_field(self, alter):
|
||||
"""
|
||||
CreateModel, AlterFooTogether/AlterOrderWithRespectTo followed by an
|
||||
add/alter/rename field should optimize to CreateModel and the Alter*
|
||||
add/alter/rename field should optimize to CreateModel with options.
|
||||
"""
|
||||
option_value = getattr(alter, alter.option_name)
|
||||
options = {alter.option_name: option_value}
|
||||
|
||||
# AddField
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
@@ -611,13 +614,12 @@ class OptimizerTests(SimpleTestCase):
|
||||
("a", models.IntegerField()),
|
||||
("b", models.IntegerField()),
|
||||
("c", models.IntegerField()),
|
||||
]),
|
||||
alter,
|
||||
], options=options),
|
||||
],
|
||||
)
|
||||
|
||||
# AlterField
|
||||
self.assertDoesNotOptimize(
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
@@ -626,6 +628,12 @@ class OptimizerTests(SimpleTestCase):
|
||||
alter,
|
||||
migrations.AlterField("Foo", "b", models.CharField(max_length=255)),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
("b", models.CharField(max_length=255)),
|
||||
], options=options),
|
||||
],
|
||||
)
|
||||
|
||||
self.assertOptimizesTo(
|
||||
@@ -643,13 +651,20 @@ class OptimizerTests(SimpleTestCase):
|
||||
("a", models.IntegerField()),
|
||||
("b", models.IntegerField()),
|
||||
("c", models.CharField(max_length=255)),
|
||||
]),
|
||||
alter,
|
||||
], options=options),
|
||||
],
|
||||
)
|
||||
|
||||
# RenameField
|
||||
self.assertDoesNotOptimize(
|
||||
if isinstance(option_value, str):
|
||||
renamed_options = {alter.option_name: 'c'}
|
||||
else:
|
||||
renamed_options = {
|
||||
alter.option_name: {
|
||||
tuple('c' if value == 'b' else value for value in item) for item in option_value
|
||||
}
|
||||
}
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
@@ -658,6 +673,12 @@ class OptimizerTests(SimpleTestCase):
|
||||
alter,
|
||||
migrations.RenameField("Foo", "b", "c"),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
("c", models.IntegerField()),
|
||||
], options=renamed_options),
|
||||
],
|
||||
)
|
||||
|
||||
self.assertOptimizesTo(
|
||||
@@ -673,10 +694,8 @@ class OptimizerTests(SimpleTestCase):
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
("b", models.IntegerField()),
|
||||
]),
|
||||
alter,
|
||||
migrations.RenameField("Foo", "b", "c"),
|
||||
("c", models.IntegerField()),
|
||||
], options=renamed_options),
|
||||
],
|
||||
)
|
||||
|
||||
@@ -695,13 +714,20 @@ class OptimizerTests(SimpleTestCase):
|
||||
("a", models.IntegerField()),
|
||||
("b", models.IntegerField()),
|
||||
("d", models.IntegerField()),
|
||||
]),
|
||||
alter,
|
||||
], options=options),
|
||||
],
|
||||
)
|
||||
|
||||
# RemoveField
|
||||
self.assertDoesNotOptimize(
|
||||
if isinstance(option_value, str):
|
||||
removed_options = None
|
||||
else:
|
||||
removed_options = {
|
||||
alter.option_name: {
|
||||
tuple(value for value in item if value != 'b') for item in option_value
|
||||
}
|
||||
}
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
@@ -710,9 +736,14 @@ class OptimizerTests(SimpleTestCase):
|
||||
alter,
|
||||
migrations.RemoveField("Foo", "b"),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
], options=removed_options),
|
||||
]
|
||||
)
|
||||
|
||||
self.assertDoesNotOptimize(
|
||||
self.assertOptimizesTo(
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
@@ -722,6 +753,12 @@ class OptimizerTests(SimpleTestCase):
|
||||
alter,
|
||||
migrations.RemoveField("Foo", "c"),
|
||||
],
|
||||
[
|
||||
migrations.CreateModel("Foo", [
|
||||
("a", models.IntegerField()),
|
||||
("b", models.IntegerField()),
|
||||
], options=options),
|
||||
],
|
||||
)
|
||||
|
||||
def test_create_alter_unique_field(self):
|
||||
|
||||
Reference in New Issue
Block a user