Django unique_together创建一个没有UNIQUE约束的索引

时间:2016-09-28 19:10:14

标签: mysql django indexing unique

我有一个模特:

class MyModel(models.Model)
    class Meta:
        unique_together=["a", "b"]
        index_together=["a", "b"]
    a=models.IntegerField(null=True, blank=True)
    b=models.ForeignKey("othermodel")

此模型的迁移:

class Migration(migrations.Migration):
    dependencies = [
        ('app', 'previous_migration'),
    ]
    operations = [
        migrations.AlterUniqueTogether(
            name='mymodel',
            unique_together=set([('a', 'b')]),
        ),
        migrations.AlterIndexTogether(
            name='mymodel',
            index_together=set([('a', 'b')]),
        ),
    ]

./manage.py sqlmigrate app mymigration

BEGIN;
CREATE INDEX `app_mymodel_id_asdfasfd_idx` ON `app_mymodel` (`a`, `b`);

COMMIT;

我正在使用MySQL数据库。

Django(1.8.5)现在一起创建两个字段的索引,但类型为INDEX而不是UNIQUE,这在保存时不会产生预期的IntegrityError重复。手动更改索引会导致正确的行为。

只有AlterUniqueTogether迁移,我得到/manage.py sqlmigrate的空输出。

我如何告诉Django创建UNIQUE索引?或者是否有充分的理由说明创建的索引不是这样设置的?

1 个答案:

答案 0 :(得分:2)

使用django 1.8和应用程序syncdb的全新安装,将创建所有需要的索引。我目前无法重现此问题,因为旧安装已手动创建索引,并且全新安装使用syncdbmigrate创建它没有任何问题。

我还没有测试过更新的django,但我认为它的效果也很好。