使用外键模型序列化django模型

时间:2010-10-25 13:54:15

标签: python django

如果我想包含外键模型字段,如何以json格式序列化Django模型?

如果我有:

class Model1(models.Model):
    name=models.CharField()
    child=models.ForeignKey(Model2)

class Mode2(models.Model):
    field1=models.CharField()
    field2=models.IntegerField()

我想在json中包含所有内容......

2 个答案:

答案 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)