如果我想包含外键模型字段,如何以json格式序列化Django模型?
如果我有:
class Model1(models.Model):
name=models.CharField()
child=models.ForeignKey(Model2)
class Mode2(models.Model):
field1=models.CharField()
field2=models.IntegerField()
我想在json中包含所有内容......
答案 0 :(得分:2)
我遇到了类似的问题,因此我采用了之前完成的一些代码,并对其进行了改进。它实际上是在一个完整的python序列化框架SpitEat中结束的。您可以下载试试here。文档还不是很好,所以这里是用来序列化你的东西的代码:
>>> 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())
你有你想要的东西!
答案 1 :(得分: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)