3

假设我有这个模型:

class Place(models.Model):
    ....
    owner = ForeignKey(CustomUserModel)
    ....

我有这个 DRF 序列化程序,它返回一个Places 列表(调用它的视图使用 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_relatedand 和prefetch_related上面提到的查询,但它似乎在序列化程序稍后进行的查询方面没有任何区别。

我错过了什么?

4

1 回答 1

2

select_related将按预期与序列化程序一起工作。

如果您使用通用视图,请确保在视图的“查询集”属性中进行设置。

在“get_queryset”中使用 select_related 也可以。

否则,我唯一能建议的就是尝试通过更多的调试来缩小问题的范围。如果您仍然认为存在问题并且有一个可以复制它的最小示例,那么将问题作为票证提出,或者将讨论带到邮件列表中。

于 2013-07-06T15:21:24.853 回答