@nurzhannogerbek

Как правильно отпарсить JSON во view Django?

Здравствуйте! Помогите пожалуйста составить вьюху.

Использую плагин Nestable. Структуру дерево храню в сериализованном виде.

JS:
// Сохранить новую структуру дерева
$("#document-order-btn").click(function(){
	console.log($('#documents').nestable('serialize'));
	$.ajax({
		url: "order/",
		type: "post",
		contentType: 'application/json; charset= utf-8',
		dataType: 'json',
		data: JSON.stringify($('#documents').nestable('serialize')),
	});
});


В БД есть таблица со столбцами: parent_id (предок), level (уровень вложенности - начинается от нуля), tree_id (позиция - начинается с 1).

Передал через AJAX во вьюху данные, как их дальше использовать для изменения нужных полей не могу понять. Подскажите пожалуйста как правильно отпарсить данные и изменить данные модели данных.

views.py:
class DocumentOrderView(CsrfExemptMixin, JsonRequestResponseMixin, FormView):
    def post(self, request, *args, **kwargs):
        print self.request_json
        # В терменале получаю данные [{u'id': 1}, {u'id': 2, u'children': [{u'id': 3}, {u'id': 4}]}, {u'id': 5, u'children': [{u'id': 6}, {u'id': 7}, {u'id': 8}, {u'id': 9}]},}]
        return self.render_json_response({'saved': 'ok'})
  • Вопрос задан
  • 643 просмотра
Решения вопроса 1
NogerbekNurzhan, можно попробовать так
class DocumentOrderView(CsrfExemptMixin, JsonRequestResponseMixin, FormView):
    def post(self, request, *args, **kwargs):
        self.tree_update(None, self.request_json)
        return self.render_json_response({'saved': 'ok'})

    @staticmethod
    def tree_update(parent_id, children):
        for child in children:
            Tree.objects.filter(pk=child['id']).update(parent_id=parent_id)
            tree_update(child['id'], child.get('children', []))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Вам нужно перебрать массив словарей, значения ключей которых могут быть также массивы со словарями?

arr = [{u'id': 1}, {u'id': 2, u'children': [{u'id': 3}, {u'id': 4}]}, {u'id': 5, u'children': [{u'id': 6}, {u'id': 7}, {u'id': 8}, {u'id': 9}]},]

for item in arr:
    if 'children' in item:
        for child in item['children']:
            print(child['id'])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы