Получение множества файлов в модели 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
Данные первой модели находятся в моей базе данных;
и эти данные для поля "многие ко многим";
Я хочу получить все данные следующим образом;
[
{
"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
Я решил свою проблему, используя разбор данных, как описано выше.