如何将Django模型实例“pickle”到数据库中,以便生成可以加载示例数据的Python代码?
我想知道怎么把Django模型的实例保存到数据库里,然后转成可以用来加载示例数据的Python代码。
我的目标是:
1) 从我在MySQL数据库里存储的几百条记录中,做一个快照。
2) 对这个快照里的数据进行修改(比如把名字去掉)。
3) 把这些数据转成一个“序列化字符串”或者实际的Python代码,这样我就可以用它来加载数据到新用户的账户里。
我主要想实现的功能是,从我当前活跃的Django网站用户中选择一个,复制并匿名化他们的一些数据,然后把这些数据作为示例数据加载给所有新用户,这样他们就可以用这些数据来帮助学习系统。
2 个回答
3
在Django 1.8及以上版本中,如果你的模型里有外键,你可以使用:
my_dict = dict([(f.attname, getattr(instance, f.attname))
for f in instance._meta.get_fields()
if hasattr(f, 'attname')])
14
一个简单的方法是把模型转换成字典。这样,你就可以很方便地把它保存起来,然后再用它来创建新的模型实例。
要把模型存储为字典,你可以使用Django自带的一个函数:
from django.forms.models import model_to_dict
my_dict = model_to_dict(my_instance,fields=[],exclude=[])
一旦你把实例转换成字典,并且把需要的部分处理好,就可以使用普通的 pickle.dumps
和 pickle.loads
方法来存储和取回数据。要用这个字典创建一个新的模型实例,你可以这样做:
my_instance = MyModel(**my_dict)
#add any customization for the new instance here
my_instance.save()