У меня есть настраиваемый сериализатор, который возвращает строковое представление JSON. Этот сериализатор использует django.contrib.gis.serializers.geojson.Serializer
, что намного быстрее, чем сериализатор DRF. Обратной стороной этого сериализатора является то, что он возвращает все, уже сериализованное в строку, а не как сериализуемый объект JSON.
Есть ли способ сократить строковый процесс DRF obj> json и просто передать строка как ответ json?
В настоящее время я делаю следующее, но строковый процесс obj> string> dict> не идеален:
from django.contrib.gis.serializers.geojson import Serializer
from json import loads
class GeoJSONFastSerializer(Serializer):
def __init__(self, *args, **kwargs):
self.instances = args[0]
super().__init__()
@property
def data(self):
# The use of json.loads here to deserialize the string,
# only for it to be reserialized by DRF is inefficient.
return loads(self.serialize(self.instances))
Что реализовано (упрощенное версия) в представлении:
from rest_framework.mixins import ListModelMixin
from rest_framework.viewsets import GenericViewSet
class GeoJSONPlaceViewSet(ListModelMixin, GenericViewSet):
serializer_class = GeoJSONFastSerializer
queryset = Places.objects.all()