由于某些原因,我想对我的模型进行重大更改。我想以某种方式重新设计我的整个设计,但 Django 迁移实现通过不更新我的模型库来记住以前的设计。
让我快速展示一下我以前拥有的和现在拥有的。
app1.TopLevel
|_ app1.IntermediateLevel
|_ app2.LowLevel
我有 3 个这样的模型,然后现在我想把这个设计剪掉,变成更适合我当前项目的东西,比如
app2.TopLevel
|_ app2.LowLevel
我的主要变化是,首先我不再想要中间模型,其次我不需要保留顶部app1.TopLevel
那样。
我的数据没有问题(我运行多次迁移,其中一些使用 Python 将数据放入临时字段,然后稍后将数据放回正确的字段并删除这些临时字段)。
我的问题是,当我们创建继承模型时,我们定义了它的基础;
migrations.CreateModel(
name='IntermediateLevel',
fields=[
('toplevel_ptr', models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to='app1.TopLevel'),
)
],
bases=('app1.TopLevel',),
)
在那种情况下我会得到类似的东西
类“LowLevel”中的本地字段“toplevel_ptr”与基类“IntermediateLevel”中名称相似的字段冲突`
我阅读了官方文档和源代码(用于迁移),但到目前为止我还没有看到任何相关内容。是否可以告诉迁移系统我们更改了模型库(其父级)?
否则,我得到的唯一解决方案就是创建新模型,运行 python 迁移将数据从旧模型复制到新模型。然后删除旧模型并重命名新模型以获得我想要的名称。