Сериализация дерева в Джанго - PullRequest
4 голосов
/ 08 апреля 2011

Есть ли простой способ сериализации дерева, заданного моделью, такой как Категория, показанная ниже?

Я бы хотел получить объект 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 ]

5 голосов
/ 08 апреля 2011

Я думаю, вам придется пройтись по дереву и построить объект, который вы сериализуете, используя 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 является правильнымспособ получить список детей. Пожалуйста, прокомментируйте, если это не так.)

0 голосов
/ 08 апреля 2011

Может быть, Ташипи или Джанго-Пистон могут помочь?Если нет, вы можете взглянуть на их исходный код, чтобы получить подсказки о том, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...