0
ループ内にループを作成し、django ORMが遅延する4つの追加テーブルをフェッチする必要があるネストされた関係を持つシリアライザがあります。私はsetup_eager_loadingを使ってパフォーマンスを改善することを考えました。setup_eager_loadingの適切な使用
私はget_querysetメソッドをオーバーライドしておりません場合は従う
class EagerLoadingMixin:
@classmethod
def setup_eager_loading(cls, queryset):
if hasattr(cls, "SELECT_RELATED"):
queryset = queryset.select_related(*cls.SELECT_RELATED)
if hasattr(cls, "PREFETCH_RELATED"):
queryset = queryset.prefetch_related(*cls.PREFETCH_RELATED)
return queryset
class RentSerializer(serializers.ModelSerializer, EagerLoadingMixin):
#owner = serializers.SerializerMethodField()
timeLaps = serializers.SerializerMethodField()
#gallery = GallerySerializer(read_only=True, many=True)
#property_category = CategorySerializer()
SELECT_RELATED = ['owner',]
PREFETCH_RELATED = ['gallery', 'property_category', ]
class Meta:
model = Rental
read_only = ('id', 'token', 'created_on', 'modified_on', 'slug',)
fields = ('__all__')
class Rent(APIView):
"""
List all the rents if token is not provided else a token specific rent
"""
serializer_class = RentSerializer
def get(self, request, token=None, format=None):
reply={}
try:
rents = Rental.objects.all()
if token:
rent = Rental.objects.get(token=token)
reply['data'] = self.serializer_class(rent).data
else:
reply['data'] = self.serializer_class(rents, many=True).data
except Rental.DoesNotExist:
return error.RequestedResourceNotFound().as_response()
except:
return error.UnknownError().as_response()
else:
return Response(reply, status.HTTP_200_OK)
がどのように私は私のAPIViewでこれを使用することができますように私はEagerloadingmixinがありますか?
この方法では、私のAPIは所有者、ギャラリー、property_categoryフィールドを表示しません。 – Serenity
私はエラーは表示されませんが、これらのフィールドはSELECT_RELATEDとPREFETCH_RELATEDの中に表示されません – Serenity
シリアライザで宣言する必要があります(例ではコメントが表示されています)。 –