Изменить файл миграций 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',
        ),

Я видел два возможных обходных пути:

  1. 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.)
  2. Go into the migrations file and manually switch the migrations.DeleteModel to happen before the migrations.CreateModel

Мой вопрос в том, какое из этих решений будет предпочтительным? Правильно ли я понимаю, что --fake не будет вариантом? В настоящее время у меня нет прав на внесение изменений в файл миграций. Поэтому я немного нервничаю, давая себе права на него. Кажется, что может быть причина, по которой у меня нет разрешения. Может ли изменение файла миграций вручную вызвать проблему, или это будет моим лучшим решением в данном случае?

  • Если речь идет о работе на локальном, просто удалите все миграции и makemigrations заново.

  • Если вы работаете на продакшене, вы можете спокойно использовать --fake один раз.

  • Вы также можете изменить старые миграции, если вы знаете, как работать с миграциями, и если это несколько файлов.

Вернуться на верх