【发布时间】:2021-10-12 03:53:20
【问题描述】:
我想在 Django 3.2 中重命名一个模型,保留我现有的迁移,并且能够迁移具有旧表名的数据库并从头开始创建一个数据库。
我首先重命名了模型类以及代码中对它的所有引用。由于“./manage.py makemigrations”没有自动创建迁移,我手动创建了一个重命名模型的迁移:
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('market_integrations', '0003_migration'),
]
operations = [
migrations.RenameModel('OldModelName', 'NewModelname')
]
我最初的想法是我不应该更新现有的迁移,因为我在创建其他迁移时从不这样做。但是,当我运行“./manage.py migrate”时,旧迁移中对旧模型的引用会导致 LookupError。我已经尝试使用模型名称字符串和apps.get_model()。失败的迁移代码示例:
operations = [
migrations.CreateModel(
name="OldModelName",
...
)
]
operations = [
migrations.CreateModel(
name=apps.get_model("myapp", "OldModelName"),
...
)
]
由于在旧迁移中保留旧模型名称不起作用,我将旧迁移中的旧模型名称替换为新名称。之后,“./manage.py migrate”运行成功,包括模型重命名迁移。但是,当我尝试创建新数据库时,模型重命名迁移失败,因为该新数据库从来没有使用旧名称的表。
我应该怎么做才能保留我的迁移并让它们在现有和新数据库中工作?
我已经检查了Django migration strategy for renaming a model and relationship fields,但我没有在那里找到我的问题的答案。
【问题讨论】: