Django序列化为JSON

时间:2009-01-05 21:10:10

标签: python django json

我有一个Django模型(计划),其中包含实体类,即Activity的父级,即Event的父级。

class Entity(models.Model):
    <...>

class Activity(models.Model):
    <...>
    team_entity = models.ForeignKey(Entity)
    <...>   

class Event(models.Model):
    <...>
    activity = models.ForeignKey(Activity)
    <...>

如何序列化并将子对象和孙子作为JSON文件的一部分?

6 个答案:

答案 0 :(得分:10)

在进行序列化之前,在检索对象时,要保留关系,请使用select_related()来获取子孙,等等

请参阅http://docs.djangoproject.com/en/dev/ref/models/querysets/

答案 1 :(得分:7)

我现在使用django-piston。这样就可以了。

答案 2 :(得分:5)

在我看来,海报提出的问题是结果如下:

例如,从这些模型开始:

class Entity(models.Model):
    name = models.CharField(...)

class Activity(models.Model):
    name = models.CharField(...)
    team_entity = models.ForeignKey(Entity)

class Event(models.Model):
    name = models.CharField(...)
    activity = models.ForeignKey(Activity)

结果为JSON:

{
    "model": "Entity",
    "name":  "Dallas Cowboys",
    "activities": [
        {
            "model": "Activity",
            "name": "Practice"
        },

        {
            "model": "Activity",
            "name": "Game"
            "events": [
                {
                    "model": "Event",
                    "name": "vs Washington Redskins"
                },

                {
                    "model": "Event",
                    "name": "vs Green Bay Packers"
                }
            ]
        }
    ]
}

因此保留了亲子孙子女(不是遗产,而是一对多的关系遍历)。如果这不是最初海报的意图,我道歉......但如果是这样,我也希望得到答案。

答案 3 :(得分:3)

查看http://docs.djangoproject.com/en/dev/topics/serialization/?from=olddocs#inherited-models

中提供的Django文档序列化继承的模型和对象

这应该可以解决你的问题。

答案 4 :(得分:3)

我相信你可以在这里找到答案:http://code.djangoproject.com/ticket/4656

这将在某个阶段成为django序列化程序的一部分。现在它应该能够用这个替换标准的django序列化器,然后就可以了。

答案 5 :(得分:-1)

你可以用简单的两行代码完成这个:

from django.core import serializers
data = serializers.serialize("json", SomeModel.objects.all())