Max*_*ant 5 python django serialization django-models
有人不小心删除了生产中的实例和所有相关对象(通过Django admin)。我有数据库的备份,所以我可以取回那些数据,但是我想用脚本而不是复制数据,因为它包含许多相关的对象。
我想检索已删除的项目(我确实拥有其模型和pk,所以可以这样做MyModel.objects.get(pk=123456)),还希望检索其所有相关对象(ForeignKey,ManyToMany...),以便在生产中重新导入它们。数据库。
可以使用SQL或任何序列化格式loaddata。我怎样才能做到这一点?
为了实现这一目标,您需要将结合收集相关的对象和他们的系列化。由于您知道已删除的确切模型实例,因此可以首先删除所有对象(与django管理员执行的操作相同,使用NestedObjects收集器),然后在此列表上进行迭代以生成json。
更合适的方法是编写一次性脚本(注意2016年9月:已针对Django> = 1.9更新):
from itertools import chain
from django.core import serializers
from django.contrib.admin.utils import NestedObjects
from myproject.myapp.models import MyModel
collector = NestedObjects(using="default") # database name
collector.collect([MyModel.objects.get(pk=123456)])
objects = list(chain.from_iterable(collector.data.values()))
with open("backup_export.json", "w") as f:
f.write(serializers.serialize("json", objects))
Run Code Online (Sandbox Code Playgroud)
这将生成一个带有所有已删除实例的json文件。您现在可以使用manage.py loaddata将它们放回到生产数据库中。重新导入json时,应停用post_save信号,否则有时会因复杂的依赖项而失败。
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |