Изменить файл миграций Django или использовать флаг --fake?
Я новичок в Django и работаю над переименованием некоторых старых таблиц. Я также беру некоторые поля, которые уже существуют в нескольких таблицах, и делаю их внешними ключами. После внесения изменений и запуска makemigrations я зашел в только что созданный файл миграций и заметил, что Django пытается создать новую модель. Затем он пытается удалить старую модель. Я думаю, что проблема в том, что он пытается создать новую модель перед удалением старой. Если я попытаюсь запустить migrate прямо сейчас, он выдаст мне ошибку, говорящую:
django.db.utils.ProgrammingError: ('42S01', "[42S01] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]There is already an object named 'tblFailureTypes' in the database. (2714) (SQLExecDirectW)")
Мой файл миграций выглядит следующим образом:
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('foo', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='FailureType',
fields=[
('id', models.AutoField(db_column='FailureID', primary_key=True, serialize=False)),
('failure_type', models.CharField(db_column='Failure Type', max_length=255, null=True)),
],
options={
'db_table': 'tblFailureTypes',
'managed': True,
},
),
migrations.DeleteModel(
name='FailureTypes',
),
Я видел два возможных обходных пути:
- Use the --fake flag when running migrate, but I have seen a lot of comments that this can cause problems later down the road. (I am also thinking --fake may not work here because there are many other migrations happening that I do not want to fake.)
- Go into the migrations file and manually switch the migrations.DeleteModel to happen before the migrations.CreateModel
Мой вопрос в том, какое из этих решений будет предпочтительным? Правильно ли я понимаю, что --fake не будет вариантом? В настоящее время у меня нет прав на внесение изменений в файл миграций. Поэтому я немного нервничаю, давая себе права на него. Кажется, что может быть причина, по которой у меня нет разрешения. Может ли изменение файла миграций вручную вызвать проблему, или это будет моим лучшим решением в данном случае?
Если речь идет о работе на локальном, просто удалите все миграции и
makemigrations
заново.Если вы работаете на продакшене, вы можете спокойно использовать
--fake
один раз.Вы также можете изменить старые миграции, если вы знаете, как работать с миграциями, и если это несколько файлов.