假设我有这个模型:
class Place(models.Model):
....
owner = ForeignKey(CustomUserModel)
....
我有这个 DRF 序列化程序,它返回一个Place
s 列表(调用它的视图使用 DRF 的generics.ListAPIView
类):
class PlaceSerializer(serializers.ModelSerializer):
owner = UserModelSerializer() # Gets only specific fields for a place owner
class Meta:
model = Place
问题是,当序列化程序得到一个返回的查询时,比如说...... 50 个地方,我可以看到 (in connection.queries
) 正在为每个owner
外键关系进行查询,这总结了很多查询。这当然对性能有很大的影响。
同样重要的是,对于调用序列化程序的视图,我使用自定义查询get_queryset()
仅返回Place
距中心点一定距离的 s。为此,我使用了 Django 的extra()
方法。
我已经尝试使用select_related
and 和prefetch_related
上面提到的查询,但它似乎在序列化程序稍后进行的查询方面没有任何区别。
我错过了什么?