Получение множества файлов в модели django с помощью общих полей модели

У меня есть две модели;

class userPageAuths(models.Model):

    enName = models.CharField(max_length=30)
    trName = models.CharField(max_length=30)

    def __str__(self):
        return self.enName

class userPages(models.Model):

    enName = models.CharField(max_length=30)
    trName = models.CharField(max_length=30)
    parent_id = models.IntegerField(blank=True, null=True)
    user_page_auths = models.ManyToManyField(userPageAuths, related_name="page_auth_list", blank=True)

    def __str__(self):
        return self.enName

Данные первой модели находятся в моей базе данных;

enter image description here

данные второй модели таковы; enter image description here

и эти данные для поля "многие ко многим"; enter image description here

Я хочу получить все данные следующим образом;

[
    {
        "id": 1,
        "enName": "x",
        "trName": "x",
        "parent_id": null
    },
    {
        "id": 2,
        "enName": "y",
        "trName": "y",
        "parent_id": null
    },
    {
        "id": 3,
        "enName": "z",
        "trName": "z",
        "parent_id": 2
    },
    {
        "id": 1,
        "enName": "a",
        "trName": "a",
        "parent_id": 3 // this userpages_id which connected manytomany relation and ı want to get this as a parent_id
    },
    {
        "id": 2,
        "enName": "b",
        "trName": "b",
        "parent_id": 3
    },
    {
        "id": 3,
        "enName": "c",
        "trName": "c",
        "parent_id": 3
    },
]

Я использую эти серализаторы;

class pagesSerializer(serializers.ModelSerializer):
    class Meta:
        model = userPages
        fields = ('id', 'enName', 'trName', 'parent_id')

и это мой метод;

class pagesListView(ListAPIView):
    serializer_class = pagesSerializer

    def get_queryset(self):
        return list(itertools.chain(userPages.objects.all(), userPageAuths.objects.all()))

и получили такие данные;

[
    {
        "id": 1,
        "enName": "x",
        "trName": "x",
        "parent_id": null
    },
    {
        "id": 2,
        "enName": "y",
        "trName": "y",
        "parent_id": null
    },
    {
        "id": 3,
        "enName": "z",
        "trName": "z",
        "parent_id": 2
    },
    {
        "id": 1,
        "enName": "a",
        "trName": "a",
        "parent_id": null
    },
    {
        "id": 2,
        "enName": "b",
        "trName": "b",
        "parent_id": null
    },
    {
        "id": 3,
        "enName": "c",
        "trName": "c",
        "parent_id": null
    },
]

Я хочу получить userpages_id как parent_id для имени a,b,c. Возможно ли это или есть другое решение?

class pagesListView(ListAPIView):
    serializer_class = pagesSerializer

    def get_queryset(self):
        all =  list(itertools.chain(userPages.objects.all()))
        serializer = pagesSerializer(all, many=True)
        json_data = json.loads(json.dumps(serializer.data))
        for element in json_data:
            if 'user_page_auths' in element:
                if element['user_page_auths']:
                    for data in element['user_page_auths']:
                        data["parent_id"] = element['id']
                        json_data.append(data)
                    del element['user_page_auths']
                else:
                    del element['user_page_auths']
        return json_data

Я решил свою проблему, используя разбор данных, как описано выше.

Вернуться на верх