在Django中序列化树

时间:2011-04-08 15:15:56

标签: django serialization tree

有没有简单的方法来序列化由模型给出的树,例如下面显示的类别?

我想得到一个像json这样的对象:

[ { 'name': 'cat1',
    'children': [ { 'name': 'cat11',
                    'children': [ ... ]
                ]
  }
  ...
]

由于

class Category(MPTTModel):
    name = models.CharField(max_length=50, unique=True)
    parent = models.ForeignKey('self', null=True, blank=True, related_name='children')
    order_key = models.IntegerField()

    class Meta:
        verbose_name_plural = 'Categories'

    class MPTTMeta:
        order_insertion_by = ['order_key']

    def __unicode__(self):
        return "%s" %(self.name)

2 个答案:

答案 0 :(得分:5)

我认为你必须走树,并构建一个使用JSON序列化的对象。我假设你的树是非循环的,因为否则会变得更复杂。我没有测试过这个,但是这样的东西会起作用(只要你确定你没有循环):

def serialize_to_json(self):
    return json.dumps(self.serializable_object())

def serializable_object(self):
    "Recurse into tree to build a serializable object"
    obj = {'name': self.name, 'children': []}
    for child in self.get_children():
        obj['children'].append(child.serializable_object())
    return obj

(不记得children_set是否是获取儿童名单的正确方法。如果这是错误的,请评论。)

答案 1 :(得分:0)

也许Tasypie或Django-Piston可以提供帮助?如果没有,你可以查看他们的源代码,以获得有关如何执行此操作的一些提示。

相关问题