У меня есть проект django с таблицей базы данных, которая уже содержит данные. Я хотел бы изменить имя поля без потери каких-либо данных в этом столбце. Мой первоначальный план состоял в том, чтобы просто изменить имя поля модели таким образом, чтобы фактически не изменить имя таблицы БД (используя параметр столбца db_column
):
Оригинальная модель:
class Foo(models.Model):
orig_name = models.CharField(max_length=50)
Новая модель:
class Foo(models.Model):
name = models.CharField(max_length=50, db_column='orig_name')
Но при запуске schemamigration --auto
Юга создается скрипт миграции, который удаляет исходный столбец orig_name
и добавляет новый столбец name
, что может привести к нежелательному побочному эффекту удаления данных в этом столбце. (Я также не понимаю, почему Саут хочет изменить имя столбца в БД, так как я понял, что db_column позволяет изменять имя поля модели без изменения имени столбца таблицы базы данных).
Если мне не удастся изменить поле модели без изменения поля db, думаю, я мог бы сделать более простое изменение имени, например:
Оригинальная модель:
class Foo(models.Model):
orig_name = models.CharField(max_length=50)
Новая модель:
class Foo(models.Model):
name = models.CharField(max_length=50)
Независимо от того, какую стратегию я в конечном итоге использовал (я бы предпочел первую, но нашел бы вторую приемлемую), моя главная задача - не потерять данные, которые уже есть в этом столбце.
Требуется ли многоэтапный процесс? (например, 1. добавление столбца, 2. перенос данных из старого столбца в новый столбец и 3. удаление исходного столбца)
Или я могу изменить скрипт миграции что-то вроде db.alter_column
?
Каков наилучший способ сохранить данные в этом столбце при изменении имени столбца?