Django 在运行时更改 on_delete

问题描述 投票:0回答:1

故事

我正在制作一个Journal应用程序。目前致力于跨多台机器的同步。我想逐个模型同步,而不是一次同步整个数据库。我什至允许同步几个条目,图像: enter image description here

我当前面临的问题是用新的同步数据替换模型的数据。我有 JSON 格式的模型(不是所有模型)的新数据库。

其他型号对正在更改的数据有

ForeginKey
(带有
on_delete=CASCADE
)。我的映射为
dict
{old_pk : new_pk...}
。我将使用它来将其他对象
ForeginKey
更新为正在同步的对象(其
pk
将会更改)。

问题

我想删除旧数据库而不进行删除。我想暂时将

CASCADE
设置为
on_delete
,直到完成迁移。
注意:

DO_NOTHING

代码包含:

ReadAt

通过在运行时更改 
read_by = models.ForeignKey( Person, on_delete=models.CASCADE, # change temporarily to DO_NOTHING at runtime )

我可以这样做:

on_delete

	
python django database sqlite
1个回答
0
投票

# DELETE OLD DATA ReadAt.on_delete=DO_NOTHING # pseudo code I want to achieve Person.objects.all().delete() # without code above, this deletes all ReadAt # LOAD NEW DATA with open("person_file.json", mode="w+", encoding="utf-8") as myfile: myfile.write(json.dumps(data_new_server)) call_command("loaddata", "person_file.json") # Then fix the PKs of ReadAt with a mapping I have made ReadAt.on_delete=CASCADE # pseudo code, change back # ideally check the integrity of ReadAt data now

我现在就尝试实施它。

© www.soinside.com 2019 - 2024. All rights reserved.