Я бы облегчил получение полного дерева объектов для данного объекта.
Допустим, у меня есть:
Note 5
Note 1
Note 2
Note 3
Note 4
Note 6
Note 7
Я попытался использовать модель для получения детей и родителей и объедините это вместе. Затем я нашел какое-то решение с использованием сериализаторов, но когда я возвращаюсь, я всегда получаю все заметки. Я хотел бы получить только дерево заметок.
Мой текущий код:
# models.py
class Note(models.Model):
note_id = models.AutoField(primary_key=True)
title = models.CharField(max_length=100)
parent_note = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, related_name='subnotes')
# serializers.py
class RecursiveSerializer(serializers.Serializer):
def to_representation(self, value):
serializer = self.parent.parent.__class__(value, context=self.context)
return serializer.data
class NoteTreeSerializer(serializers.ModelSerializer):
subnotes = RecursiveSerializer(many=True, read_only=True)
class Meta:
model = Note
fields = ('note_id', 'title', 'subnotes')
# views.py
class NoteTreeViewSet(viewsets.ModelViewSet):
queryset = Note.objects.all()
serializer_class = NoteTreeSerializer
def retrieve(self, request, pk, *args, **kwargs):
queryset = Note.objects.filter(pk=pk)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
Для http://127.0.0.1: 8000 / api / note / 3 / note-tree / Я бы хотел получить:
{
"note_id": 1,
"title": "Note 1",
"subnotes": [
{
"note_id": 2,
"title": "Note 2",
"subnotes": [
{
"note_id": 3,
"title": "Note 3",
"subnotes": [
{
"note_id": 4,
"title": "Note 4",
"subnotes": []
}
]
}
]
}
]
},
Итак, для нот 1, 2, 3, 4 результат должен быть одинаковым, для 5, 6, 7 он должен быть другим.