См. Также https://code.djangoproject.com/wiki/AlterModelOnSyncDB
У меня была такая же ошибка, возникающая со мной при работе с настройкой mysql, чей механизм хранения таблиц по умолчанию - MyISAM, и я хотел использовать InnoDB (используя рецепт, указанный в ссылке выше, мы использовали сигнал post_syncdb
вызвать код преобразования). Однако при использовании South для создания новых таблиц они сначала создавались с использованием механизма MyISAM, а затем преобразовывались. Я ошибочно полагал, что таблицы InnoDB не делали то, что они должны были делать, когда на самом деле это были MyISAM; поскольку таблица была преобразована по сигналу, любая ошибка миграции не сможет быть применена: - /
Если вам нужно использовать или создавать таблицы InnoDB, где по умолчанию используется MyISAM, это можно решить с помощью:
# add at the beginning of your migration
if db.backend_name == 'mysql':
db.execute('SET storage_engine=INNODB')
или, если вы не возражаете, удар по производительности:
# add this to settings.py
DATABASE_OPTIONS = {
"init_command": "SET storage_engine=INNODB", # XXX: performance hit...
}