Подтвердить что ты не робот

Переход на юг-юг - добавление индексов FULLTEXT

Мне нужно добавить индекс FULLTEXT в одно из полей модели Django и понять, что для этого нет встроенных функций, и что такой индекс должен быть добавлен вручную в mysql (наш внутренний DB).

Я хочу, чтобы этот индекс создавался в каждой среде. Я понимаю, что изменения модели могут быть рассмотрены с миграциями юга Джанго, но есть ли способ добавить такой индекс FULLTEXT как часть миграции?

В общем случае, если есть какой-либо пользовательский SQL, который должен быть запущен, как я могу сделать его частью миграции.

Спасибо.

4b9b3361

Ответ 1

Вы можете написать что угодно, как миграцию. Это точка!

После того, как вы выполните South и запустите, введите python manage.py schemamigration myapp --empty my_custom_migration, чтобы создать пустую миграцию, которую вы можете настроить.

Откройте файл XXXX_my_custom_migration.py в myapp/migrations/ и введите свою собственную миграцию SQL в методе forwards. Например, вы можете использовать db.execute

Миграция может выглядеть примерно так:

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"