修改 Django 迁移文件,还是使用 --fake 标志?
Modify Django migrations file, or use --fake flag?
我是 Django 的新手,我正在努力重命名一些旧表。我还采用了一些已经存在于几个表中的字段,并将它们设为外键。在进行更改和 运行ning makemigrations 之后,我进入了新创建的迁移文件,并注意到 Django 正在尝试创建一个新模型。然后它试图删除旧模型。我认为问题在于它试图在删除旧模型之前创建一个新模型。如果我现在尝试 运行 迁移,它会抛出一条错误消息:
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',
),
我见过两种可能的解决方法:
- 在 运行迁移时使用 --fake 标志,但我看到很多评论说这可能会导致以后出现问题。 (我也在想 --fake 在这里可能行不通,因为还有许多我不想伪造的其他迁移正在发生。)
- 进入迁移文件并手动切换 migrations.DeleteModel 发生在 migrations.CreateModel
之前
我的问题是,其中哪一个是这里的首选解决方案?我的想法是否正确 --fake 不会成为一种选择?
我目前无权更改迁移文件。所以我有点紧张给自己权限。似乎我没有获得许可可能是有原因的。手动修改迁移文件是否会导致问题,或者在这种情况下这将是我的最佳解决方案吗?
如果您谈论的是在本地工作,只需删除所有迁移并再次makemigrations
。
如果您正在生产,您可以安全地使用 --fake
一次。
如果你知道如何处理迁移,并且文件很少,你也可以更改旧的迁移。
我是 Django 的新手,我正在努力重命名一些旧表。我还采用了一些已经存在于几个表中的字段,并将它们设为外键。在进行更改和 运行ning makemigrations 之后,我进入了新创建的迁移文件,并注意到 Django 正在尝试创建一个新模型。然后它试图删除旧模型。我认为问题在于它试图在删除旧模型之前创建一个新模型。如果我现在尝试 运行 迁移,它会抛出一条错误消息:
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',
),
我见过两种可能的解决方法:
- 在 运行迁移时使用 --fake 标志,但我看到很多评论说这可能会导致以后出现问题。 (我也在想 --fake 在这里可能行不通,因为还有许多我不想伪造的其他迁移正在发生。)
- 进入迁移文件并手动切换 migrations.DeleteModel 发生在 migrations.CreateModel 之前
我的问题是,其中哪一个是这里的首选解决方案?我的想法是否正确 --fake 不会成为一种选择? 我目前无权更改迁移文件。所以我有点紧张给自己权限。似乎我没有获得许可可能是有原因的。手动修改迁移文件是否会导致问题,或者在这种情况下这将是我的最佳解决方案吗?
如果您谈论的是在本地工作,只需删除所有迁移并再次
makemigrations
。如果您正在生产,您可以安全地使用
--fake
一次。如果你知道如何处理迁移,并且文件很少,你也可以更改旧的迁移。