Django 1.8.4 makemigrations CreateModel改变了字段的顺序

时间:2015-09-08 09:44:23

标签: python django django-migrations django-1.8

我们刚刚切换到Django 1.8.4(从1.6开始,所以第一次使用迁移),我们在使用makemigrations命令时发现了一个问题。创建包含外键的新模型时会发生此问题。该命令生成一个更改字段顺序的迁移文件:它最后设置所有FK,并按字母顺序重新组织它们。

以下是一个例子:

class AnotherRandomModel(models.Model):
    attr1 = models.FloatField()

class AnotherRandomModel2(models.Model):
    attr1 = models.FloatField()

class RandomModel(models.Model):
    fk2 = models.ForeignKey(AnotherRandomModel2)
    attr2 = models.FloatField()
    fk1 = models.ForeignKey(AnotherRandomModel)
    attr1 = models.FloatField()

这将生成此迁移文件:

class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='AnotherRandomModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('attr1', models.FloatField()),
            ],
        ),
        migrations.CreateModel(
            name='AnotherRandomModel2',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('attr1', models.FloatField()),
            ],
        ),
        migrations.CreateModel(
            name='RandomModel',
            fields=[
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                ('attr2', models.FloatField()),
                ('attr1', models.FloatField()),
                ('fk1', models.ForeignKey(to='inventorylab.AnotherRandomModel')),
                ('fk2', models.ForeignKey(to='inventorylab.AnotherRandomModel2')),
            ],
        ),
    ]

你可以看到它如何保持非FK字段的顺序,但是在最后设置两个FK并重新排序它们。

令人不安的是,不要在模型上使用与数据库相同的顺序。有谁知道如何强制命令保持模型的顺序?

我知道我总是可以手动编辑创建的迁移文件,但我希望避免这样做。

0 个答案:

没有答案