При обратном переходе Django с помощью AddField, может ли новый столбец быть переименован и не удален Django?
В качестве доказательства концепции я сделал эти две миграции в максимально простом приложении Django, polls
.
Вот миграция 0001
.
# Generated by Django 4.0.5 on 2022-06-15 18:17
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Question',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('question_text', models.CharField(max_length=200)),
],
),
]
Здесь миграция 0002
# Generated by Django 4.0.5 on 2022-06-15 18:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('polls', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='question',
name='question_type',
field=models.CharField(max_length=200, null=True),
),
]
А вот модель.
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
question_type = models.CharField(max_length=200, null=True)
Допустим, я мигрировал базу данных и теперь хочу вернуть 0002
. Я выполняю следующую команду python manage.py sqlmigrate polls 0002 --backwards
и получаю следующий SQL
BEGIN;
--
-- Add field question_type to question
--
CREATE TABLE "new__polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL);
INSERT INTO "new__polls_question" ("id", "question_text") SELECT "id", "question_text" FROM "polls_question";
DROP TABLE "polls_question";
ALTER TABLE "new__polls_question" RENAME TO "polls_question";
COMMIT;
Понятно, что это удаление всего столбца (путем удаления и воссоздания таблицы), но мне интересно, можно ли заставить Django сохранить этот столбец, не удаляя его?