Сериализация объекта Django в требуемом формате - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть модель хранилища, в которой я получаю объекты с использованием сериализации:

tree_data = serializers.serialize ("json", Storage.objects.all ())

Это выглядит так:

[
  {"model": "hello_extjs.storage", "pk": 9, "fields": {"code": "000", "name": "Title 1", "id_parent": 0}},
  {"model": "hello_extjs.storage", "pk": 10, "fields": {"code": "111", "name": "Test 1", "id_parent": 9}},
  {"model": "hello_extjs.storage", "pk": 11, "fields": {"code": "222", "name": "Test 2", "id_parent": 9}},
  {"model": "hello_extjs.storage", "pk": 12, "fields": {"code": "333", "name": "Title 2", "id_parent": 0}},
  {"model": "hello_extjs.storage", "pk": 13, "fields": {"code": "444", "name": "Test 3", "id_parent": 12}},
  {"model": "hello_extjs.storage", "pk": 14, "fields": {"code": "555", "name": "Test 4", "id_parent": 12}}

]

Мне нужно иметь данные в этой форме:

{
    text: 'Storage',
    expanded: true,
    children: [{
        text: "Title 1",
        children: [{
            text: "Test 1",
            leaf: true
        }, {
            text: "Test 2",
            leaf: true
        }],
        leaf: false,
        "expanded": true
    }, {
        text: "Title 2",
        children: [{
            text: "Test 3",
            leaf: true
        }, {
            text: "Test 4",
            leaf: true
        }],
        leaf: false,
        "expanded": true
    }]
}

Как мне сериализовать объекты, чтобы получить данные в том виде, в котором они мне нужны?

1 Ответ

0 голосов
/ 25 сентября 2018

Встроенный сериализатор Django разработан для удовлетворения потребностей Django - выгрузив весь набор запросов в прибор и перезагрузив его, он, разумеется, не создаст совершенно определенный формат, который вы хотите.Таким образом, решение простое: сначала напишите пользовательский код, генерирующий ожидаемую структуру в виде Python-диктата (содержащего только dicts, списки, строки, логические и числовые значения - iow json-совместимые типы) из ваших моделей, а затем передайте его json.dumps().Задача решена.

В конце концов вы можете захотеть взглянуть на что-то вроде serpy , чтобы помочь с пользовательским кодом сериализации ...

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