如何解决如何在确保优化查询的同时获取相关表中的最新条目
我考虑了两个模型。 RV_Offers 和 RV_Details。每个报价可以有多个详细信息,即我在 RV_Details 表中有一个外键关系字段。
这是我的观点:
rv_offers_queryset = RV_Offers.objects.all().select_related('vendor').prefetch_related('details')
details_queryset = RV_Details.objects.all().select_related('rv_offer')
title = Subquery(details_queryset.filter(
rv_offer=OuterRef("id"),).order_by("-created_at").values("original_title")[:1])
offers_queryset = rv_offers_queryset.annotate(
title=title).filter(django_query)
offers = RVOffersSerializer(offers_queryset,many=True).data
return Response({'result': offers},status=HTTP_200_OK)
可以看出,我正在将优惠查询集传递给序列化程序。 现在,这是我的序列化程序:
class RVOffersSerializer(serializers.ModelSerializer):
details = serializers.SerializerMethodField()
vendor = VendorSerializer()
def get_details(self,obj):
queryset = RV_Details.objects.all().select_related('rv_offer')
queryset = queryset.filter(rv_offer=obj.id).latest('created_at')
return RVDetailsSerializer(queryset).data
class Meta:
model = RV_Offers
fields = '__all__'
如果您查看 get_details 方法,我会尝试获取属于报价的最新详细信息。我的问题是,即使我使用 select_related 来优化查询,结果仍然非常慢,实际上,我使用 django 调试工具栏来检查查询,显然 select_related 似乎没有任何效果。 我做错了什么或者我还能如何解决这个问题?
解决方法
这就是我为减少数据库上的查询数量所做的:
def get_details(self,obj):
details = obj.details.last()
return RVDetailsSerializer(details).data
我能够使用它将查询数量从 45 减少到 4。 这是因为在view中,我已经使用select_related来制作queryset,这里又使用obj了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。