0
루프 내부에 루프를 생성 할 수있는 추가 테이블 4 개를 가져와 django ORM을 지연시킬 수있는 중첩 관계가있는 serializer가 있습니다. 나는 성능을 향상시키기 위해 setup_eager_loading을 사용하는 것을 고려했다. setup_eager_loading의 적절한 사용
난 내가 get_queryset 메서드를 재정하고 있지 않다 경우class EagerLoadingMixin:
@classmethod
def setup_eager_loading(cls, queryset):
if hasattr(cls, "SELECT_RELATED"):
queryset = queryset.select_related(*cls.SELECT_RELATED)
if hasattr(cls, "PREFETCH_RELATED"):
queryset = queryset.prefetch_related(*cls.PREFETCH_RELATED)
return queryset
class RentSerializer(serializers.ModelSerializer, EagerLoadingMixin):
#owner = serializers.SerializerMethodField()
timeLaps = serializers.SerializerMethodField()
#gallery = GallerySerializer(read_only=True, many=True)
#property_category = CategorySerializer()
SELECT_RELATED = ['owner',]
PREFETCH_RELATED = ['gallery', 'property_category', ]
class Meta:
model = Rental
read_only = ('id', 'token', 'created_on', 'modified_on', 'slug',)
fields = ('__all__')
class Rent(APIView):
"""
List all the rents if token is not provided else a token specific rent
"""
serializer_class = RentSerializer
def get(self, request, token=None, format=None):
reply={}
try:
rents = Rental.objects.all()
if token:
rent = Rental.objects.get(token=token)
reply['data'] = self.serializer_class(rent).data
else:
reply['data'] = self.serializer_class(rents, many=True).data
except Rental.DoesNotExist:
return error.RequestedResourceNotFound().as_response()
except:
return error.UnknownError().as_response()
else:
return Response(reply, status.HTTP_200_OK)
어떻게 내가 내 APIView이 사용할 수에 따라 같은 Eagerloadingmixin이?
rents
의 검색어를 가져올 때
내 API는 소유자, 갤러리 및 property_category 필드를 표시하지 않습니다. – Serenity
오류가 발생하지는 않지만 해당 필드는 SELECT_RELATED 및 PREFETCH_RELATED 안에 표시되지 않습니다. – Serenity
이들은 serializer에서 선언해야합니다 (예를 들어 주석이있는 것을 볼 수 있습니다). –