序列化对象会运行太多SQL查询

问题描述

我正在尝试将相关的字段集序列化为列表。问题是序列化QuerySet的效率很低。

class ZipCode(..):
    city = ForeignKey...
    code = CharField...

class CityManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().select_related('county').prefetch_related('zipcodes').annotate(
            realestate_count=Count('zipcodes__realestates')).order_by('name',)


class City(..):
    objects = CityManager()
    ....
    
    
    @property
    def zip_codes_list(self):
        return self.zipcodes.values_list('code',flat=True)

如您所见,我正在预取zipcodes,因此我认为它不应该执行太多查询

class CitySerializer(serializers.ModelSerializer):
    county = CountySerializer(read_only=True)
    zip_codes_list = serializers.ListField(read_only=True)
    realestate_count = serializers.IntegerField(default=0,read_only=True)
    indexed_at_hmnz = serializers.CharField(read_only=True)
    index_status_display = serializers.CharField(source='get_index_status_display',read_only=True)

    class Meta:
        model = City
        fields = ['id','name','county','realestate_count','zip_codes_list','indexed_at','indexed_at_hmnz','index_status_display','is_followed']

根据Django调试工具栏,它分别查询每个对象的邮政编码。

enter image description here

您知道如何提高效率吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)