Example #1
0
class Migration(migrations.Migration):

    dependencies = [
        ('migrations', '0002_second'),
    ]

    operations = [
        migrations.CreateModel(
            name='ModelWithCustomBase',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
            ],
            options={},
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='UnmigratedModel',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
            ],
            options={},
            bases=(models.Model, ),
        ),
        migrations.DeleteModel(name='Author', ),
        migrations.DeleteModel(name='Book', ),
    ]
Example #2
0
 def test_single(self):
     """
     The optimizer does nothing on a single operation,
     and that it does it in just one pass.
     """
     self.assertOptimizesTo(
         [migrations.DeleteModel("Foo")],
         [migrations.DeleteModel("Foo")],
         exact=1,
     )
Example #3
0
 def test_optimize_through_fields(self):
     """
     field-level through checking is working. This should manage to collapse
     model Foo to nonexistence, and model Bar to a single IntegerField
     called "width".
     """
     self.assertOptimizesTo(
         [
             migrations.CreateModel(
                 "Foo", [("name", models.CharField(max_length=255))]),
             migrations.CreateModel("Bar",
                                    [("size", models.IntegerField())]),
             migrations.AddField("Foo", "age", models.IntegerField()),
             migrations.AddField("Bar", "width", models.IntegerField()),
             migrations.AlterField("Foo", "age", models.IntegerField()),
             migrations.RenameField("Bar", "size", "dimensions"),
             migrations.RemoveField("Foo", "age"),
             migrations.RenameModel("Foo", "Phou"),
             migrations.RemoveField("Bar", "dimensions"),
             migrations.RenameModel("Phou", "Fou"),
             migrations.DeleteModel("Fou"),
         ],
         [
             migrations.CreateModel("Bar",
                                    [("width", models.IntegerField())]),
         ],
     )
Example #4
0
 def test_create_delete_model(self):
     """
     CreateModel and DeleteModel should collapse into nothing.
     """
     self.assertOptimizesTo(
         [
             migrations.CreateModel(
                 "Foo", [("name", models.CharField(max_length=255))]),
             migrations.DeleteModel("Foo"),
         ],
         [],
     )
Example #5
0
 def _test_create_alter_foo_delete_model(self, alter_foo):
     """
     CreateModel, AlterModelTable, AlterUniqueTogether/AlterIndexTogether/
     AlterOrderWithRespectTo, and DeleteModel should collapse into nothing.
     """
     self.assertOptimizesTo(
         [
             migrations.CreateModel(
                 "Foo", [("name", models.CharField(max_length=255))]),
             migrations.AlterModelTable("Foo", "woohoo"),
             alter_foo,
             migrations.DeleteModel("Foo"),
         ],
         [],
     )
Example #6
0
class Migration(migrations.Migration):

    dependencies = [("unspecified_app_with_conflict", "0001_initial")]

    operations = [
        migrations.DeleteModel("Tribble"),
        migrations.RemoveField("Author", "silly_field"),
        migrations.AddField("Author", "rating",
                            models.IntegerField(default=0)),
        migrations.CreateModel(
            "Book",
            [
                ("id", models.AutoField(primary_key=True)),
            ],
        )
    ]
Example #7
0
class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.DeleteModel("Tribble"),
        migrations.RemoveField("Author", "silly_field"),
        migrations.AddField("Author", "rating",
                            models.IntegerField(default=0)),
        migrations.CreateModel(
            "Book",
            [
                ("id", models.AutoField(primary_key=True)),
                ("author",
                 models.ForeignKey(
                     "migrations.Author", models.SET_NULL, null=True)),
            ],
        )
    ]
Example #8
0
 def test_optimize_elidable_operation(self):
     elidable_operation = operations.base.Operation()
     elidable_operation.elidable = True
     self.assertOptimizesTo(
         [
             elidable_operation,
             migrations.CreateModel(
                 "Foo", [("name", models.CharField(max_length=255))]),
             elidable_operation,
             migrations.CreateModel("Bar",
                                    [("size", models.IntegerField())]),
             elidable_operation,
             migrations.RenameModel("Foo", "Phou"),
             migrations.DeleteModel("Bar"),
             elidable_operation,
         ],
         [
             migrations.CreateModel(
                 "Phou", [("name", models.CharField(max_length=255))]),
         ],
     )
Example #9
0
    def test_simple_migration(self):
        """
        Tests serializing a simple migration.
        """
        fields = {
            'charfield':
            models.DateTimeField(default=datetime.datetime.utcnow),
            'datetimefield':
            models.DateTimeField(default=datetime.datetime.utcnow),
        }

        options = {
            'verbose_name': 'My model',
            'verbose_name_plural': 'My models',
        }

        migration = type(
            "Migration", (migrations.Migration, ), {
                "operations": [
                    migrations.CreateModel("MyModel", tuple(fields.items()),
                                           options, (models.Model, )),
                    migrations.CreateModel("MyModel2",
                                           tuple(fields.items()),
                                           bases=(models.Model, )),
                    migrations.CreateModel(name="MyModel3",
                                           fields=tuple(fields.items()),
                                           options=options,
                                           bases=(models.Model, )),
                    migrations.DeleteModel("MyModel"),
                    migrations.AddField("OtherModel", "datetimefield",
                                        fields["datetimefield"]),
                ],
                "dependencies": [("testapp", "some_other_one")],
            })
        writer = MigrationWriter(migration)
        output = writer.as_string()
        # We don't test the output formatting - that's too fragile.
        # Just make sure it runs for now, and that things look alright.
        result = self.safe_exec(output)
        self.assertIn("Migration", result)
Example #10
0
 def tearDown(self):
     # Delete table after testing
     if hasattr(self, 'current_state'):
         self.apply_operations('gis', self.current_state,
                               [migrations.DeleteModel('Neighborhood')])
     super().tearDown()
Example #11
0
    def test_optimize_through_create(self):
        """
        We should be able to optimize away create/delete through a create or delete
        of a different model, but only if the create operation does not mention the model
        at all.
        """
        # These should work
        self.assertOptimizesTo(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())]),
                migrations.DeleteModel("Foo"),
            ],
            [
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())]),
            ],
        )
        self.assertOptimizesTo(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())]),
                migrations.DeleteModel("Bar"),
                migrations.DeleteModel("Foo"),
            ],
            [],
        )
        self.assertOptimizesTo(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())]),
                migrations.DeleteModel("Foo"),
                migrations.DeleteModel("Bar"),
            ],
            [],
        )
        # This should not work - FK should block it
        self.assertDoesNotOptimize([
            migrations.CreateModel(
                "Foo", [("name", models.CharField(max_length=255))]),
            migrations.CreateModel("Bar", [
                ("other", models.ForeignKey("testapp.Foo", models.CASCADE))
            ]),
            migrations.DeleteModel("Foo"),
        ], )
        # The same operations should be optimized if app_label is specified and
        # a FK references a model from the other app.
        self.assertOptimizesTo(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar", [
                    ("other", models.ForeignKey("testapp.Foo", models.CASCADE))
                ]),
                migrations.DeleteModel("Foo"),
            ],
            [
                migrations.CreateModel("Bar", [
                    ("other", models.ForeignKey("testapp.Foo", models.CASCADE))
                ]),
            ],
            app_label="otherapp",
        )
        # But it shouldn't work if a FK references a model with the same
        # app_label.
        self.assertDoesNotOptimize(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar", [
                    ("other", models.ForeignKey("testapp.Foo", models.CASCADE))
                ]),
                migrations.DeleteModel("Foo"),
            ],
            app_label="testapp",
        )
        # This should not work - bases should block it
        self.assertDoesNotOptimize([
            migrations.CreateModel(
                "Foo", [("name", models.CharField(max_length=255))]),
            migrations.CreateModel("Bar", [("size", models.IntegerField())],
                                   bases=("testapp.Foo", )),
            migrations.DeleteModel("Foo"),
        ], )
        # The same operations should be optimized if app_label and none of
        # bases belong to that app.
        self.assertOptimizesTo(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())],
                                       bases=("testapp.Foo", )),
                migrations.DeleteModel("Foo"),
            ],
            [
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())],
                                       bases=("testapp.Foo", )),
            ],
            app_label="otherapp",
        )
        # But it shouldn't work if some of bases belongs to the specified app.
        self.assertDoesNotOptimize(
            [
                migrations.CreateModel(
                    "Foo", [("name", models.CharField(max_length=255))]),
                migrations.CreateModel("Bar",
                                       [("size", models.IntegerField())],
                                       bases=("testapp.Foo", )),
                migrations.DeleteModel("Foo"),
            ],
            app_label="testapp",
        )

        self.assertOptimizesTo(
            [
                migrations.CreateModel(
                    'Book', [('name', models.CharField(max_length=255))]),
                migrations.CreateModel(
                    'Person', [('name', models.CharField(max_length=255))]),
                migrations.AddField(
                    'book', 'author',
                    models.ForeignKey('test_app.Person', models.CASCADE)),
                migrations.CreateModel('Review', [
                    ('book', models.ForeignKey('test_app.Book',
                                               models.CASCADE))
                ]),
                migrations.CreateModel(
                    'Reviewer', [('name', models.CharField(max_length=255))]),
                migrations.AddField(
                    'review', 'reviewer',
                    models.ForeignKey('test_app.Reviewer', models.CASCADE)),
                migrations.RemoveField('book', 'author'),
                migrations.DeleteModel('Person'),
            ],
            [
                migrations.CreateModel(
                    'Book', [('name', models.CharField(max_length=255))]),
                migrations.CreateModel(
                    'Reviewer', [('name', models.CharField(max_length=255))]),
                migrations.CreateModel('Review', [
                    ('book', models.ForeignKey('test_app.Book',
                                               models.CASCADE)),
                    ('reviewer',
                     models.ForeignKey('test_app.Reviewer', models.CASCADE)),
                ]),
            ],
        )