序列化包含外键的Django模型

4 投票
2 回答
2522 浏览
提问于 2025-04-16 06:03

如何将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())

这样你就得到了你想要的东西!

撰写回答