的比方說,我有這樣的模式:Django的REST的架構串行使得很多查詢
class Place(models.Model):
....
owner = ForeignKey(CustomUserModel)
....
而且我有這個DRF串行器返回(視圖調用它使用DRF的generics.ListAPIView
類Place
個列表):
class PlaceSerializer(serializers.ModelSerializer):
owner = UserModelSerializer() # Gets only specific fields for a place owner
class Meta:
model = Place
的問題是,當串行得到一個返回查詢,讓我們說...... 50個地方,我可以看到(在connection.queries
)一個查詢正在爲每個owner
外鍵關係提出,總結到很多o f查詢。這當然對性能有很大的影響。
同樣重要的一點是,對於調用序列化程序的視圖,我有get_queryset()
只返回Place
s,它們使用自定義查詢與中心點保持一定的距離。我爲此使用了Django的extra()
方法。
我已經嘗試使用select_related
和prefetch_related
與上面提到的查詢,但它似乎沒有任何區別在序列化程序稍後進行的查詢方面。
我錯過了什麼?
謝謝你的迴應,湯姆。如果查詢需要從請求中獲取值,我可以使用'queryset'屬性嗎?現在我正在使用'get_queryset()'。 – OrPo
在'get_queryset'中使用select_related也可以。 –
@TomChristie嗨,你能幫我嗎? http://stackoverflow.com/questions/26744664/django-tweak-the-rest-framework-serializer-to-getting-a-different-json-structure – Abhishek