【发布时间】:2013-07-04 09:16:37
【问题描述】:
假设我有这个模型:
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 个地方,我可以看到(在connection.queries 中)正在为每个owner 外键关系进行查询,总和最多查询。这当然会对性能产生很大影响。
另外值得一提的是,对于调用序列化程序的视图,我使用自定义查询仅返回与中心点有一定距离的get_queryset() Places。为此,我使用了 Django 的 extra() 方法。
我已尝试将select_related 和prefetch_related 与上述查询一起使用,但就序列化程序稍后进行的查询而言,它似乎没有任何区别。
我错过了什么?
【问题讨论】:
标签: django django-models django-rest-framework