3

私がこのモデルを持っているとしましょう:

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ましたが、シリアライザーによって後で行われるクエリに関して違いはないようです。

私は何が欠けていますか?

4

1 に答える 1