我们刚刚切换到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并重新排序它们。
令人不安的是,不要在模型上使用与数据库相同的顺序。有谁知道如何强制命令保持模型的顺序?
我知道我总是可以手动编辑创建的迁移文件,但我希望避免这样做。