我正在尝试使用Field.db_index
为具有迁移的应用程序在模型字段上添加索引。查看Django's documentation我要做的就是设置db_index=True
:
class Person(models.Model):
first_name = models.CharField()
last_name = models.CharField(db_index=True)
然后我首先尝试了新的Django的Migration:
./manage.py makemigrations app-name
但是迁移似乎没有注意到更改,也没有添加用于创建索引的sql命令。所以我按照here的解释尝试了
django-admin.py
:django-admin.py sqlindexes app-name
但这也不打印sql命令,它退出并显示以下错误:
CommandError: App 'app-name' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.
最佳答案
好的,我设法使用Meta.index_together
创建索引。这不是最干净的方法,因为我实际上并未将多个字段一起索引,但它可用于makemigrations
:
class Person(models.Model):
class Meta():
index_together = [['last_name']]
first_name = models.CharField()
last_name = models.CharField()
现在
makemigrations
确实进行了新的迁移:./manage.py makemigrations app-name
>>Migrations for 'app-name':
>> 0005_auto_20140929_1540.py:
>> - Alter index_together for Person (1 constraint(s))
相应的sql命令实际上是
CREATE INDEX
。./manage.py sqlmigrate app-name 0005_auto_20140929_1540
>>BEGIN;
>>CREATE INDEX app-name_person_last_name_7...4_idx ON `app-name_person` (`last_name`);
>>COMMIT;
关于django - 通过迁移将索引添加到Django中的模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109184/