假设我有这个模型:
class Place(models.Model):
....
owner = ForeignKey(CustomUserModel)
....
我有这个返回 Place
列表的 DRF 序列化程序(调用它的 View 使用 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
外键关系,总结了很多查询。这当然对性能有很大的影响。
同样重要的是,对于调用序列化程序的 View ,我使用 get_queryset()
仅返回距离中心点一定距离的 Place
自定义查询。为此,我使用了 Django 的 extra()
方法。
我已经尝试将 select_related
和 prefetch_related
与上述查询一起使用,但对于稍后由序列化器。
我错过了什么?
最佳答案
select_related将按预期与序列化程序一起工作。
如果您使用的是通用 View ,请确保在 View 的“queryset”属性中进行设置。
在“get_queryset”中使用 select_related 也可以。
否则,我唯一可以建议的就是尝试通过更多调试来缩小问题范围。如果您仍然认为存在问题并且有一个最小的示例可以复制它,那么请将问题作为票证提出,或者将讨论带到邮件列表。
关于Django-rest-framework 序列化程序进行大量查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17502939/