序列化包含外键的Django模型
如何将Django模型转换成json格式,并且想要包含外键模型的字段?
假设我有:
class Model1(models.Model):
name=models.CharField()
child=models.ForeignKey(Model2)
class Mode2(models.Model):
field1=models.CharField()
field2=models.IntegerField()
我想把所有内容都包含在json里...
2 个回答
1
我有一段时间没用过Django了,这个对你有用吗?
import simplejson as json
data = Model1.objects.get(pk=some_id)
to_dump = {'pk': data.pk, 'name':data.name,
'fields':{'field_1':data.child.field_1,
'field_2':data.child.field_2
}
}
json_data = json.dumps(to_dump)
2
我之前也遇到过类似的问题,所以我拿了一些以前写的代码,进行了改进。最后,这些代码变成了一个完整的Python序列化框架,叫做SpitEat。你可以在这里下载并试用。现在文档还不是很好,所以我给你提供一下用来序列化的代码:
>>> from spiteat.djangosrz import DjangoModelSrz #you should actually put spiteat in your path first
>>> Model1Srz = DjangoModelSrz.factory(Model1)
>>> srz_instance = Model1Srz(some_obj_you_want_to_serialize)
>>> srz_instance.spit()
... {
... 'pk': <a_pk>,
... 'id': <an_id>,
... 'name': <a_name>,
... 'child': {
... 'pk': <another_pk>,
... 'id': <another_id>,
... 'field1': <a_value>,
... 'field2': <another_value>
... }
... }
这个框架可以进行完整、深度的序列化。你可以自定义一些内容(比如选择包含哪些字段等等……不过这些功能还没有经过测试,也没有详细的文档)。接下来的几天,文档会变得更好,代码也会改进,所以你可以放心使用,不用担心没有支持!
当然,一旦你把对象序列化了,就可以像这样使用json
:
>>> import json
>>> json_srz = json.dumps(srz_instance.spit())
这样你就得到了你想要的东西!