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) 

и тогда я впервые попробовал Migration нового Джанго:

./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;