2013-04-24 2 views
7

특정 모델에 대한 API를 노출하고 관련 필드 중 일부를 직렬화하려고합니다. 이러한 관련 필드는 일반적으로 반복되며 각 필드 연속 직렬화에 대해 수많은 db 쿼리를 수행하고 싶지 않습니다. 모든 관련 인스턴스를 미리 쿼리하는 간단한 방법이 있습니까? 그렇다면 RelatedField 시리얼 라이저를 사전에서 찾으십시오. 아니면 관련 필드의 ModelSerializer에서 지정 하시겠습니까?관련 필드 모델을 사전 검색하는 방법이 있습니까?

답변

5

당신의 질의에 Django의 표준 prefetch_relatedselect_related 방법을 사용할 수 있습니다.

model 바로 가기 대신 queryset 특성을 사용하십시오. 예를 들어 ...

class ExampleView(generics.ListCreateAPIView): 
    serializer_class = ExampleSerializer 
    queryset = Example.objects.select_related(...) 
+0

감사합니다. Tom. 나는 prefetch_related에 대해 몰랐다. 사용하지 않는 것보다 사용하는 것이 좋지만, 여전히 내 시나리오에서 가장 효율적인 구현은 아닙니다. 이유는 다음과 같습니다. (1) 여러 쿼리 인 IN 쿼리를 사용하는 반면 내 응용 프로그램은 하나의 쿼리에서 필요한 결과를 예측할 수 있습니다. (2) 관련 분야의 대부분은 동일한 모델 클래스를 사용하며 prefect_related처럼 보이지 않습니다. 이 작업을보다 맞춤화 한 방법에 대한 다른 제안이 있습니까? – jacob

+0

당신의 유스 케이스가 어떻게 생겼는지 정확히 모르겠지만 사전에 제공된 일반 뷰에 맞지 않는 커스텀이 필요하다면 뷰 메소드를 명시 적으로 작성하는 것이 좋습니다. –

+0

예를 들어 튜토리얼 파트 3의 첫 번째 섹션에서와 같이 ... http://django-rest-framework.org/tutorial/3-class-based-views.html –

관련 문제