Решение
mmcnickle может работать и кажется разумным, но я предпочитаю двухэтапный процесс. На первом этапе вы меняете имя таблицы.
В вашей модели убедитесь, что у вас есть новое имя таблицы:
class Meta:
db_table = new_table_name'
Затем, как предложил mmcnickle, создайте пользовательскую миграцию:
python manage.py schemamigration xyz migration_name --empty
Подробнее об этом можно прочитать здесь:
https://docs.djangoproject.com/en/dev/ref/models/options/
Теперь с помощью пользовательской миграции также добавьте строку для переименования таблицы вперед и назад:
db.rename_table("old_table_name","new_table_name")
Этого может быть достаточно для переноса и изменения имени таблицы, но если вы ранее использовали имя пользовательской таблицы Class Meta, тогда вам придется сделать немного больше. Поэтому я бы сказал, как правило, просто для безопасности сделайте поиск в вашем файле миграции для «old_table_name» и замените любые записи, которые вы найдете, на новое имя таблицы. Например, если вы ранее использовали имя пользовательской таблицы Class Meta, вы, скорее всего, увидите:
'Meta': {'object_name': 'ModelNameYouWillChangeNext', 'db_table': "u'old_table_name'"},
Так что вам нужно поменять это старое имя таблицы на новое.
Теперь вы можете мигрировать с помощью:
python manage.py migrate xyz
На этом этапе ваше приложение должно работать, поскольку все, что вы сделали, это изменили имя таблицы и попросили Django найти новое имя таблицы.
Второй шаг - изменить название вашей модели. Сложность этого действительно зависит от вашего приложения, но в основном вам просто нужно изменить весь код, который ссылается на старое имя модели, на код, который ссылается на новое имя модели. Вам также, вероятно, потребуется изменить некоторые имена файлов и каталогов, если вы использовали в них имя старой модели для организационных целей.
После этого ваше приложение должно работать нормально. На данный момент ваша задача в значительной степени выполнена, и ваше приложение должно нормально работать с новым именем модели и новым именем таблицы. Единственная проблема, с которой вы столкнетесь при использовании South, это то, что в следующий раз, когда вы создадите миграцию с помощью функции автоопределения, она попытается удалить старую таблицу и создать новую с нуля, поскольку обнаружила имя вашей новой модели. Чтобы это исправить, вам нужно создать еще одну пользовательскую миграцию:
python manage.py schemamigration xyz tell_south_we_changed_the_model_name_for_old_model_name --empty
Приятно то, что здесь вы ничего не делаете, так как вы уже изменили название своей модели, поэтому Саут подхватит это. Просто мигрируйте с помощью «pass» в миграции вперед и назад:
python manage.py migrate xyz
Ничего не сделано, и Юг теперь понимает, что это актуально. Попробуйте:
python manage.py schemamigration xyz --auto
и вы должны увидеть, что ничего не изменилось