我正在制作一个Journal应用程序。目前致力于跨多台机器的同步。我想逐个模型同步,而不是一次同步整个数据库。我什至允许同步几个条目,图像:
我当前面临的问题是用新的同步数据替换模型的数据。我有 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
# 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
我现在就尝试实施它。