7

我试图在使用Field.db_index的模型字段中为已迁移的应用程序添加索引。看着Django's documentation所有我需要做的是设置db_index=True使用迁移将索引添加到Django中的模型字段

class Person(models.Model): 
    first_name = models.CharField() 
    last_name = models.CharField(db_index=True) 

,然后我第一次尝试新的Django的迁移:

./manage.py makemigrations app-name 

但迁移似乎没有注意到的改变,也不会增加用于创建索引的sql命令。所以,我想django-admin.py作为解释here

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. 

回答

5

行,我成功地创建使用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; 
相关问题