繁体   English   中英

修改 Django 迁移文件,还是使用 --fake 标志?

[英]Modify Django migrations file, or use --fake flag?

我是 Django 的新手,我正在重命名一些旧表。 我还采用了一些表中已经存在的字段,并将它们设为外键。 进行更改并运行 makemigrations 后,我进入了新创建的迁移文件,并注意到 Django 正在尝试创建新的 model。 然后它试图删除旧的 model。 我认为问题在于它试图在删除旧的 model 之前创建一个新的 model。 如果我现在尝试运行 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. 在运行 migrate 时使用 --fake 标志,但我看到很多评论说这可能会在以后导致问题。 (我也在想 --fake 在这里可能行不通,因为还有很多其他的迁移正在发生,我不想伪造。)
  2. Go 进入迁移文件并手动切换 migrations.DeleteModel 以发生在 migrations.CreateModel 之前

我的问题是其中哪一个将是这里的首选解决方案? 我认为 --fake 不会成为一种选择是否正确? 我目前无权更改迁移文件。 所以我有点紧张给自己权限。 似乎我没有权限可能是有原因的。 手动修改迁移文件会导致问题,还是在这种情况下这将是我最好的解决方案?

  • 如果您正在谈论在本地工作,只需删除所有迁移并makemigrations进行迁移。

  • 如果您正在生产,您可以安全地使用--fake一次。

  • 如果您知道如何处理迁移并且文件很少,您也可以更改旧迁移。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM