我有一个模特:
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
索引?或者是否有充分的理由说明创建的索引不是这样设置的?
答案 0 :(得分:2)
使用django 1.8和应用程序syncdb
的全新安装,将创建所有需要的索引。我目前无法重现此问题,因为旧安装已手动创建索引,并且全新安装使用syncdb
和migrate
创建它没有任何问题。
我还没有测试过更新的django,但我认为它的效果也很好。