вставить новое поле и значение во вложенный список json с помощью рекурсии в структуре отдыха Python Django - PullRequest
0 голосов
/ 04 сентября 2018

Может, кто-нибудь подскажет, как обновить / вставить поле и значение во вложенный список json в зависимости от условия.

Как и прежде, мой вложенный список JSON похож на

objlist= [{ "label": "1", "children": [{ "label": "2", "children": [{ "label": "3" }]}]}{"label": "4","children": [{ "label": "5"},{ "label": "6"}]}{"label":"7"},{"label":"8"}]

после рекурсии и логики реализации мой вывод будет выглядеть как ниже \

objlist= [{ "label": "1", "children": [{ "label": "2", "children": [{ "label": "3" }]}], "checked":"true"}{"label": "4","children": [{ "label": "5", "checked":"true"},{ "label": "6"}]}{"label":"7"},{"label":"8", "checked":"true"}]

и для этого код будет написан ниже

def get(self, request, format=None):
    queryset = models.Master_Industry.objects.filter(parent__isnull=True)
    serializer1 = masterserializer.IndustrySerializer(queryset, many=True)
    json_string = json.dumps(serializer1.data)

    stringobj = 2,5
    my_dict = json.loads(json_string)

    for item in my_dict:
        if item["value"] in stringobj:
            item["checked"] = True
            continue

        for itemchild in item["children"]:
            if itemchild["value"] in stringobj:
                itemchild["checked"] = True
                continue

            for itemchildinner in itemchild["children"]:
                if itemchildinner["value"] in stringobj:
                    itemchildinner["checked"] = True
                    continue


    print(my_dict)
    return Response(serializer1.data)

Так скажите, пожалуйста, как решить эту проблему? спасибо

1 Ответ

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

Я не знаю, как устроена ваша модель или что-то в этом роде. Но вот идея, как это сделать:

class LabelTree(serializers.ModelSerializer):
     children = serializers.SerializerMethodField()

    class Meta:
        fields = ('label', 'children')
        model = Label

    def get_children(self, obj):
        children = Label.objects.filter(parent=obj)
        return LabelTree(children, many=True)

Вы находите детей вашего объекта, фильтруя по родительскому полю, и сериализуете их. код не проверен, но идея должна работать.

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