私がこのモデルを持っているとしましょう:
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
ましたが、シリアライザーによって後で行われるクエリに関して違いはないようです。
私は何が欠けていますか?