私がこのモデルを持っているとしましょう:
class Place(models.Model):
....
owner = ForeignKey(CustomUserModel)
....
そして、sのリストを返すこのDRFシリアライザーがありますPlace(それを呼び出すビューはDRFのgenerics.ListAPIViewクラスを使用します):
class PlaceSerializer(serializers.ModelSerializer):
owner = UserModelSerializer() # Gets only specific fields for a place owner
class Meta:
model = Place
問題は、シリアライザーが返すクエリを取得すると、たとえば... 50 の場所で、外部キー関係connection.queriesごとにクエリが作成されていることがわかりますowner。これは、合計すると多くのクエリになります。もちろん、これはパフォーマンスに大きな影響を与えます。
また、シリアライザーを呼び出すビューでは、カスタム クエリを使用して、中心点から一定の距離にある sget_queryset()のみを返していたことも重要です。PlaceそのためにDjangoのextra()方法を使用しました。
select_related上記のクエリを使用して試してみprefetch_relatedましたが、シリアライザーによって後で行われるクエリに関して違いはないようです。
私は何が欠けていますか?