7

Model alanları üzerinde, geçişleri olan bir uygulama için Field.db_index kullanarak dizinler eklemeye çalışıyorum. Django's documentation Yapmam gereken tek bakıldığında db_index=True ayarlamaktır:Göçmenliklerle Django'da alanlara endeksler ekleme

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

ve sonra ben ilk yeni Django'nın Göç çalıştı:

./manage.py makemigrations app-name 

ama Göç değişiklik fark görünmüyor ve eklemez bir dizin oluşturmak için sql komutu.

django-admin.py sqlindexes app-name 

Ama bu da sql komutunu yazmaz ve aşağıdaki hata ile çıkar: here açıklandığı gibi Yani django-admin.py çalıştı

CommandError: App 'app-name' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations. 

cevap

5

Tamam, Meta.index_together kullanarak dizinleri oluşturmak başardı. Aslında birlikte birden çok alan indeksleme değilim, çünkü en temiz yolu değil ama makemigrations çalışır:

class Person(models.Model): 
    class Meta(): 
     index_together = [['last_name']] 
    first_name = models.CharField() 
    last_name = models.CharField() 

Şimdi makemigrations yeni göç eder ki:

./manage.py makemigrations app-name 

>>Migrations for 'app-name': 
>> 0005_auto_20140929_1540.py: 
>> - Alter index_together for Person (1 constraint(s)) 

Ve tekabül sql komut aslında 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;