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; 
相關問題