Django:如何迁移到基于 class 的索引

Django: How to migrate to class-based indexes

引入了 Django 1.11 Class-based model indexes。之前定义为

class A(models.Model):
    class Meta:
        index_together = [
            ('foo', 'bar'),
        ]

现在可以定义为

class A(models.Model):
    class Meta:
        indexes = [
            models.Index(fields=['foo', 'bar']),
        ]

当我更改为模型 运行 python manage.py makemigrations 的新语法时,它会创建类似

的迁移
class Migration(migrations.Migration):

    dependencies = [
        ('app', '0001_initial'),
    ]

    operations = [
        migrations.AlterIndexTogether(
            name='a',
            index_together=set([]),
        ),
        migrations.AddIndex(
            model_name='a',
            index=models.Index(fields=['foo', 'bar'], name='app_a_f12345_idx'),
        ),
    ]

此迁移将删除并重新创建我的索引,这是我想避免的事情。

从旧语法切换到新语法的推荐方法是什么?我在文档中找不到任何内容。

您可以编辑生成的迁移,使索引 name 与原始 index_together 索引名称匹配,然后 运行 manage.py migrate--fake 选项匹配。