﻿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
23121	Infinte migrations when changing Meta options	JockeTF	nobody	"Changing a model's meta options sometimes causes Django to generate an infinite number of migrations.

Create a model with meta options.

{{{#!python
from django.db import models

class Pony(models.Model):
    date_created = models.DateTimeField()

    class Meta():
        ordering = ('-date_created',)
}}}

Make migrations.

{{{#!python
$ python3 manage.py makemigrations
Migrations for 'infinite':
  0001_initial.py:
    - Create model Pony
}}}

Remove the meta options from the model.

{{{#!python
from django.db import models

class Pony(models.Model):
    date_created = models.DateTimeField()
}}}

Make migrations.

{{{#!python
$ python3 manage.py makemigrations
Migrations for 'infinite':
  0002_auto_20140728_1440.py:
    - Change Meta options on pony

$ python3 manage.py makemigrations
Migrations for 'infinite':
  0003_auto_20140728_1440.py:
    - Change Meta options on pony

$ python3 manage.py makemigrations
Migrations for 'infinite':
  0004_auto_20140728_1440.py:
    - Change Meta options on pony
}}}

I first encountered this issue when upgrading from Django 1.7b4 to 1.7c1. I do not know what exactly is causing this, but it happens in more cases than just when removing the meta options. In my project I have many migrations scripts for several different models. Two of the models ended up suffering from this issue after upgrading to Django 1.7c1. The issue is still present in Django 1.7c2. Squashing the migrations does not help. However, removing the migrations and starting anew solves the issue.

Below is an example of a squashed migration which suffers from this issue.

{{{#!python
from django.db import models, migrations

class Migration(migrations.Migration):

    replaces = [('infinite', '0001_initial'), ('infinite', '0002_auto_20140728_1440')]

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Pony',
            fields=[
                ('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
                ('date_created', models.DateTimeField()),
            ],
            options={
                'ordering': ('-date_created',),
            },
            bases=(models.Model,),
        ),
        migrations.AlterModelOptions(
            name='pony',
            options={},
        ),
    ]
}}}

Starting from scratch solves the issue.

{{{#!python
from django.db import models, migrations

class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Pony',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')),
                ('date_created', models.DateTimeField()),
            ],
            options={
            },
            bases=(models.Model,),
        ),
    ]
}}}"	Bug	closed	Migrations	1.7-rc-2	Release blocker	fixed			Accepted	0	0	0	0	0	0
