У меня есть проект django с таблицей базы данных, которая уже содержит данные. Я хотел бы изменить имя поля, не потеряв ни одного из данных в этом столбце. Мой первоначальный план состоял в том, чтобы просто изменить имя поля модели таким образом, чтобы на самом деле не изменять имя таблицы db (используя параметр столбца 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
вызывает перенос script, который удаляет исходный столбец orig_name
и добавляет новый столбец name
, который будет иметь нежелательный побочный эффект удаления данных в этом столбце, (Я также смущен тем, почему Юг хочет изменить имя столбца в db, поскольку мое понимание 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. удаление исходного столбца)
Или я могу изменить миграцию script с чем-то вроде db.alter_column
?
Каков наилучший способ сохранить данные в этом столбце при изменении имени столбца?