2013-07-06 3 views
2

의 많은의 나는이 모델이 있다고 가정 해 봅시다하게) :장고 - 나머지 프레임 워크 시리얼 쿼리

class PlaceSerializer(serializers.ModelSerializer): 
    owner = UserModelSerializer() # Gets only specific fields for a place owner 

    class Meta: 
     model = Place 

시리얼 라이저가 반환하는 쿼리를 얻을 때 문제가, 내가 (쿼리가 각 owner 외래 키 관계를 위해 만들어진되고 있음) connection.queries에서 볼 수의 50 곳 ... 말을 할 수있다, 많은 것을 합친 f 쿼리. 이것은 물론 성능에 큰 영향을줍니다.

또한 언급해야 할 점은 serializer를 호출하는 뷰의 경우 get_queryset()은 사용자 지정 쿼리를 사용하여 중심점에서 특정 거리에있는 Place 만 반환한다는 것입니다. 나는 Django의 extra() 메소드를 사용했다.

나는 위에서 언급 한 쿼리와 함께 select_relatedprefetch_related을 사용해 보았지만, 나중에 시리얼 라이저에서 쿼리를 작성하는 데 어떤 차이가없는 것으로 보입니다.

무엇이 누락 되었습니까?

답변

2

select_related은 serializer에서 예상대로 작동합니다.

일반보기를 사용하는 경우보기의 'queryset'속성에서 설정했는지 확인하십시오.

select_related를 사용하면 'get_queryset'도 사용할 수 있습니다.

그렇지 않으면 제가 제안 할 수있는 유일한 방법은 더 많은 디버깅을 통해 문제를 줄이는 것입니다. 여전히 문제가 있다고 생각하고 그것을 복제 할 수있는 최소한의 예가 있으면 문제를 티켓으로 제기하거나 토론을 메일 링리스트로 가져 가십시오.

+0

답장을 보내 주셔서 감사합니다. 쿼리가 요청에서 값을 가져와야하는 경우 'queryset'속성을 사용할 수 있습니까? 지금은'get_queryset()'을 사용하고 있습니다. – OrPo

+0

select_related 내부에서 'get_queryset'을 사용하면 작동합니다. –

+0

@TomChristie 안녕하세요, 도와주세요. http://stackoverflow.com/questions/26744664/django-tweak-the-rest-framework-serializer-to-getting-a-different-json-structure – Abhishek

관련 문제