2011-03-28 17 views
19

Necesito agregar un índice FULLTEXT a uno de los campos de mi modelo Django y comprender que no hay una funcionalidad incorporada para hacer esto y que dicho índice debe agregarse manualmente en mysql (nuestra parte posterior Fin DB).Migración al sur de Django - Agregar índices FULLTEXT

Quiero que este índice se cree en todos los entornos. Entiendo que los cambios en el modelo se pueden manejar con las migraciones al sur de Django, pero ¿hay alguna manera de agregar un índice FULLTEXT como parte de una migración?

En general, si hay algún SQL personalizado que deba ejecutarse, ¿cómo puedo hacer que forme parte de una migración?

Gracias.

Respuesta

31

Puede escribir cualquier cosa como una migración. ¡Ese es el punto!

Una vez que tenga South en funcionamiento, escriba python manage.py schemamigration myapp --empty my_custom_migration para crear una migración en blanco que pueda personalizar.

Abra el archivo XXXX_my_custom_migration.py en myapp/migrations/ y escriba allí su migración de SQL personalizada en el método forwards. Por ejemplo, podría utilizar db.execute

La migración podría ser algo como esto:

class Migration(SchemaMigration): 

    def forwards(self, orm): 
     db.execute("CREATE FULLTEXT INDEX foo ON bar (foobar)") 
     print "Just created a fulltext index..." 
     print "And calculated {answer}".format(answer=40+2) 


    def backwards(self, orm): 
     raise RuntimeError("Cannot reverse this migration.") 
     # or what have you 


$ python manage.py migrate myapp XXXX # or just python manage.py migrate. 
"Just created fulltext index...." 
"And calculated 42" 
Cuestiones relacionadas