Возможно ли победить рекурсивную связь в модели Django
Модель:
class ProductCategory(MPTTModel):
"""категории продуктов"""
name = models.CharField(max_length=255)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')
def __str__(self):
return self.name
Сериализатор:
class RecursiveSerializer(serializers.Serializer):
def to_representation(self, value):
serializer = self.parent.parent.__class__(value, context=self.context)
return serializer.data
class CategorySerializer(serializers.ModelSerializer):
children = RecursiveSerializer(many=True, read_only=True)
class Meta:
model = ProductCategory
fields = ('id', 'parent', 'children')
Представление:
class CategoryListAPI(viewsets.ModelViewSet):
queryset = ProductCategory.objects.all()
serializer_class = CategorySerializer
@action(detail=False)
def roots(self, request):
queryset = ProductCategory.objects.filter(parent=None)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
У меня 500 записей в бд, и 3 уровня вложенности. Ответ формируется более 10 сек, что очень плохо. Многое перепробовал, ничего не помогает. Наткнулся вот на такое решение https://stackoverflow.com/a/27073386/14093156 но оно не работает to_native вроде бы устарело, а с to_representation не получается никак. Буду рад любой помощи!