Go ahead, I would continue to study the South approach. This is a workflow that I would try:
1) Transition the southern schema to create two new TextField fields called "fail_reqs_txt" and "pass_reqs_txt".
2) Create a data migration to transfer data from old fields to new fields
3) Create a schema migration to remove the original fields "failed_reqs" and "pass_reqs".
---- If you need the fields to be the same name as the original, I would go to:
4) Create a schema migration to add "failed_reqs" and "pass_reqs" as TextFields
5) Create a data transfer to transfer from "failed_reqs_txt" and "pass_reqs_txt" to the fields "failed_reqs" and "pass_reqs".
6) Create a schema migration to remove the failed_reqs_txt and pass_reqs_txt fields.
Despite the fact that there are many transitions, it breaks each change into atomic migrations. I would try this first. I am not sure why the South will fall and recreate dB. Did you use the convert_to_south parameter when adding south to your project? I think this replaces migration and allows the south to know that it is working with an existing project, not a new one.
Alternatively, you can do some direct ALTERS in the database to change the column type, and then upgrade model.py from CharField to TextField. Postgres supposedly supports implicitly changing data types in this way. (See Section 5.5.6.) I'm not sure about mysql, but I think it works the same. (CharField to TextFiled must be a compatible conversion)
Despite this, I backed up my data before making any changes. Hope this helps.
Joe j
source share