【发布时间】:2019-10-23 08:34:29
【问题描述】:
我有这样的迁移:
class Migration(migrations.Migration):
dependencies = [
('app', '0020_auto_20191023_2245'),
]
operations = [
migrations.AddField(
model_name='agenda',
name='theme',
field=models.PositiveIntegerField(default=1),
),
]
但它会引发错误:
django.db.utils.ProgrammingError: column "theme" of relation "app_agenda" already exists
没问题,我把这个错误包装成这样:
from django.db import migrations, models, ProgrammingError
def add_field_theme_to_agenda(apps, schema_editor):
try:
migrations.AddField(
model_name='agenda',
name='theme',
field=models.PositiveIntegerField(default=1),
),
except ProgrammingError as e: # sometimes it can exist
if "already exists" not in str(e):
raise
class Migration(migrations.Migration):
dependencies = [
('app', '0020_auto_20191023_2245'),
]
operations = [
migrations.RunPython(add_field_theme_to_agenda),
]
这就像一个魅力,并且完成了以下所有迁移。
我的问题是,每次我运行“makemigrations”时,Django 都会再次添加迁移(= 我的问题顶部的那个)。我猜是因为它在迁移中看不到它,因为我的代码混淆了它。
如何使用迁移来规避这个问题(不要说“这个问题出在您的数据库上,请更正您的数据库”之类的答案)?
【问题讨论】:
-
也许你可以运行 migrate --fake your_migration