django模型序列化

时间:2011-05-16 22:46:30

标签: django json serialization models

我想序列化模型:

class Schedule(models.Model):
   Title = models.CharField(max_length=512)

class ScheduleEvent1(models.Model):
   ScheduleContent = models.ForeignKey(Schedule)
   Description = models.TextField()

class ScheduleEvent2(models.Model):
   ScheduleContent = models.ForeignKey(Schedule)
   AnotherField = models.TextField()
   ShortDescription = models.TextField()

serializers.serialize('json', Schedule.objects.all())

一样制作smth

结果喜欢

[
{
    "pk": 2,
    "model": "Schedule",
    "fields": {
        "Title": "Some Title",
        "ScheduleEvent1": [
            {
                "pk": 19,
                "model": "ScheduleEvent1",
                "fields": {
                    "Description": "Some Descr",
                }
            },
            {
                "pk": 20,
                "model": "ScheduleEvent1",
                "fields": {
                    "Description": "Some Descr2222",
                }
            }
        ],
        "ScheduleEvent2": [
            {
                "pk": 15,
                "model": "ScheduleEvent2",
                "fields": {
                    "AnotherField": "Some text",
                    "ShortDescription" : "Some text ...",
                }
            }
        ]
    }
}

总的来说。我有实体树。我需要从root序列化这个树。

tnx寻求帮助。

1 个答案:

答案 0 :(得分:0)

http://docs.djangoproject.com/en/1.3/topics/serialization/#dependencies-during-serialization

涵盖了这个的本质。生成的文件不是精确所需的文件,因为对象不会嵌套。然而,这是Django默认生成的内容,它是Django用于反序列化的内容。

如果您使用Piston,您可以轻松定义一个将生成嵌套JSON的Handler,但它不会精确,因为Piston的JSON发射器不是精确地在Django中格式。

准确地 希望得到的东西导致扩展Django序列化程序以生成嵌套的JSON对象作为自然键。见http://code.djangoproject.com/browser/django/trunk/django/core/serializers/python.py。第47-59行

或者,您可以定义一个natural_key方法,它使用Django的'django.core.serializers.json .Serializer`来发出对象的JSON序列化,而不是其他一些自然键值。这在语义上有点奇怪,但它可能会做你想要的。