How do I “pickle” instances of Django models in a database into sample python code I can use to load sample data?

百般思念 提交于 2019-12-03 03:28:19

An easy way to do that would be to convert the model to a dict. Then, you can trivially pickle that and then re-inflate it to create new model instances.

To store the model as a dict, you can use a built-in Django function:

from django.forms.models import model_to_dict
my_dict = model_to_dict(my_instance,fields=[],exclude=[])

Once you've converted the instance to a dict and redacted what's necessary, just use the normal pickle.dumps and pickle.loads methods to store and retrieve the data. To create a new model instance using that dict, you can do something like:

my_instance = MyModel(**my_dict)
#add any customization for the new instance here
my_instance.save()
Magarato

On Django version 1.8 and above, if your models has foreign keys, you can use:

my_dict = dict([(f.attname, getattr(instance, f.attname))
               for f in instance._meta.get_fields()
               if hasattr(f, 'attname')])
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!