Я подробно объясняю проблему, с которой сталкиваюсь, и обращаюсь за помощью к этому сообществу. Я следовал этой документации Django Rest Framework , но не смог получить желаемый результат для многоуровневого вложения
Рассмотрим взаимосвязь моделей как объяснено:
- Пользователь может иметь несколько рабочих областей
- В рабочей области может быть несколько проектов
- Проект может иметь несколько списков проектов
- ProjectList может иметь несколько задач
- Задачи могут иметь несколько обновлений
User
|
Workspaces (ForeignKey="User")
|____Projects (ForeignKey="Workspaces")
|____TodoList (ForeignKey="Projects")
|____Tasks (ForeignKey="TodoList")
|____Updates (ForeignKey="Tasks")
Итак, я хочу получить все данные, которые есть у пользователя, в формате json:
[
{
"workspace_id": "99a961ec-b89e-11e8-96f8-529269fb1459",
"workspace_owner": "1",
"workspace_title": "Indie Dev Works",
"projects": [
{
"project_id":"db09cfa0-b89e-11e8-96f8-529269fb1459",
"todo_list":[
{
"list_id": "9dc64e4c-b89f-11e8-96f8-529269fb1459",
"list_name":"Project list -1",
"tasks":[
"task_name":"Create HTML docs",
"updates":[
{
"id":"d5eb660e-b89f-11e8-96f8-529269fb1459",
"text":"Creating using PUG"
},
{
.....
.....
.....
.....
},
]
]
}
]
},
{
"project_id":".........",
....
....
....
..
..
.
},
]
}
]
Поэтому, когда мой пользователь входит в систему, вводя электронную почту, я пытаюсь получить все экземпляры Workspaces и затем передать их сериализаторам.
на мой взгляд, как указано ниже:
views.py
class InitializeHome(viewsets.ViewSet):
def list(self,request):
user_email = request.user.email
user_instance = utils.getUserInstance(user_email)
workspace_instance = WorkSpace.objects.filter(workspace_owner=user_instance)
testing_serializer = WorkSpaceSerializer(workspace_instance,many=True)
return Response(testing_serializer.data)
serializers.py
class UpdateSerializer(serializers.ModelSerializer):
class Meta:
# depth = 2
fields = '__all__'
model = Update
class TaskSerializer(serializers.ModelSerializer):
updates = UpdateSerializer(many=True,read_only=True)
class Meta:
# depth = 2
fields = '__all__'
model = Task
class ProjectTodoListSerializer(serializers.ModelSerializer):
tasks = TaskSerializer(many=True,read_only=True)
class Meta:
# depth = 2
fields = '__all__'
model = ProjectTodoListItem
class ProjectSerializer(serializers.ModelSerializer):
project_todo_list = ProjectTodoListItemSerializer(many=True,read_only=True)
class Meta:
# depth = 2
fields = '__all__'
model = Project
class WorkSpaceSerializer(serializers.ModelSerializer):
projects = ProjectSerializer(many=True,read_only=True)
class Meta:
# depth = 2
model = WorkSpace
fields = '__all__'
Я получаю только это и ни один из вложенных массивов:
[
{
"id": 1,
"workspace_title": "Indie Dev Work",
"status": "ACTIVE",
"workspace_id": "26c60d80-c018-403c-84b2-d92f01f6fb7e",
"workspace_owner": 1
},
{
"id": 2,
"workspace_title": "Homework Space",
"status": "ACTIVE",
"workspace_id": "08c715cc-bd24-46d3-a1dd-14cf7ff28215",
"workspace_owner": 1
}
]