﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
27717	Squashmigrations doesn't optimize AlterModelOptions verbose_name_plural into CreateModel	Ed Morley	Ed Morley	"The `squashmigrations` command doesn't combine a `AlterModelOptions()` with `CreateModel()` in the case below.

For example (using Django master):

testapp/models.py

{{{#!python
from django.db import models


class Credentials(models.Model):
    description = models.TextField()

    class Meta:
        db_table = 'credentials'
        # This was added after 0001_initial.py was generated:
        verbose_name_plural = 'credentials'
}}}

testapp/migrations/0001_initial.py

{{{#!python
class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Credentials',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.TextField()),
            ],
            options={
                'db_table': 'credentials',
            },
        ),
    ]
}}}

testapp/migrations/0002_add_verbose_name_plural.py
{{{#!python
class Migration(migrations.Migration):

    dependencies = [
        ('testapp', '0001_initial'),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='credentials',
            options={'verbose_name_plural': 'credentials'},
        ),
    ]
}}}

Expected squashed migration (via `./manage.py squashmigrations testapp 0002`):
{{{#!python
class Migration(migrations.Migration):

    replaces = [('testapp', '0001_initial'), ('testapp', '0002_add_verbose_name_plural')]

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Credentials',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.TextField()),
            ],
            options={
                'db_table': 'credentials',
                'verbose_name_plural': 'credentials',
            },
        ),
    ]
}}}

Actual squashed migration:
{{{#!python
class Migration(migrations.Migration):

    replaces = [('testapp', '0001_initial'), ('testapp', '0002_add_verbose_name_plural')]

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Credentials',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('description', models.TextField()),
            ],
            options={
                'db_table': 'credentials',
            },
        ),
        migrations.AlterModelOptions(
            name='credentials',
            options={'verbose_name_plural': 'credentials'},
        ),
    ]
}}}"	Cleanup/optimization	closed	Migrations	dev	Normal	fixed	squashmigrations		Ready for checkin	1	0	0	0	0	0
