От руки, я бы продолжал смотреть на южный подход.Это рабочий процесс, который я бы попробовал:
1) Миграция схемы на юг для создания двух новых полей TextField, которые называются что-то вроде «failed_reqs_txt» и «sent_reqs_txt».
2) Создайте миграцию данных для переноса данных из старых полей в новые поля
3) Создайте миграцию схемы, чтобы удалить исходные поля «failed_reqs» и «sent_reqs».
---- если вам нужно, чтобы поля имели то же имя, что и оригинал, я бы тогда перешел к:
4) Создайте миграцию схемы, добавив "failed_reqs" и "прошло_reqs "как TextFields
5) Создайте миграцию данных для переноса из полей« failed_reqs_txt »и« sent_reqs_txt »в поля« failed_reqs »и« sent_reqs ».
6) Создание схемымиграция для удаления полей «failed_reqs_txt» и «sent_reqs_txt».
Хотя это много миграций, оно разбивает каждое изменение на атомные миграции.Я бы попробовал это первым.Я не уверен, почему Саут бросит и воссоздает БД.Вы запускали опцию convert_to_south при добавлении юга в ваш проект?Я думаю, что это подделывает миграцию и позволяет югу знать, что он работает с существующим проектом, а не с новым.
В качестве альтернативы, вы можете сделать несколько прямых ALTERS для базы данных, чтобы изменить тип столбца, а затем обновить model.py из CharField в TextField. Postgres , предположительно, поддерживает неявное изменение типов данных таким образом.(См. Раздел 5.5.6.) Я не уверен насчет mysql, но думаю, что он работает так же.(CharField в TextFiled должен быть совместимым преобразованием)
В любом случае, я бы сделал резервную копию своих данных перед внесением любых таких изменений.Надеюсь это поможет.