7

Sto cercando di aggiungere indici sui campi del modello utilizzando Field.db_index per un'app con migrazioni. Guardando Django's documentation tutto quello che devo fare è impostare db_index=True:Aggiunta di indici ai campi modello in Django con migrazioni

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

e poi ho provato la migrazione del nuovo Django:

./manage.py makemigrations app-name 

ma la migrazione non sembra notare il cambiamento e non aggiunge il comando sql per la creazione di un indice. Così ho provato django-admin.py come spiegato here:

django-admin.py sqlindexes app-name 

Ma questo non stampa il comando SQL o ed esce con il seguente errore:

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

risposta

5

OK, sono riuscito a creare gli indici utilizzando Meta.index_together. Non è il modo più pulito, dal momento che non sono in realtà l'indicizzazione più campi insieme, ma funziona con makemigrations:

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

Ora makemigrations fa di una nuova migrazione:

./manage.py makemigrations app-name 

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

E il comando SQL corrispondente è in realtà 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; 
Problemi correlati