我有几个条目,每个条目都有几十个“标记”,当我试图获取这些数据时,它会导致数百次查询。虽然在我所有的其他模型和链接上都可以使用预取,但在这方面似乎不起作用。下面的帖子说它与wagtails伪查询功能有关,但尚未修复。有没有一种方法可以利用标记,我可以通过api获取它们,这样它们就不会创建数百个查询(每个标记一个查询),因为响应时间慢而无法使用
如果您能提供任何帮助,我们将不胜感激
这里提出了一个类似的问题,但没有得到答案 How to prefetch Wagtail post tags?
另外,当我使用预取时,它实际上使查询的数量增加了一倍
这是我的密码:
# serializer.py////////////////////////////////////
# orderable models links
# Custom searializers to add custom display fields
class EventCollectionSerializer(serializers.ModelSerializer):
class Meta:
model = CategoryEventCollection
fields = ['id', 'collection_name', 'collection_event']
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = ['name', 'id']
# MAIN SERIALIZER PRIMARY FOCUS
class PrimaryFocusSerializer(serializers.HyperlinkedModelSerializer):
# assign fields to custom serializer
event_collection = EventCollectionSerializer(many=False)
tags = TagSerializer(many=True)
class Meta:
model = PrimaryFocus
fields = ['id',
'event_collection',
'title_major',
'synopsis',
'level_ability',
'page_count',
'reading_category',
'book_image',
'author_first_name',
'author_last_name',
'author_dob',
'tags',
'purchase_link',
'source',
]
# PRIMARY FOCUS VIEWSET//////////////////////////////////
class PrimaryFocusViewSet(viewsets.ModelViewSet):
# This snippet just console logs how many queries
def dispatch(self, *args, **kwargs):
response = super().dispatch(*args, **kwargs)
print('Queries Counted: {}'.format(len(connection.queries)))
return response
# fetch all lexis items to setup queryset
queryset = PrimaryFocus.objects.all()
# set serializer class
serializer_class = PrimaryFocusSerializer
# optimize query with select related and prefetching
def get_queryset(self):
return (PrimaryFocus.objects
.select_related('event_collection',)
.prefetch_related('tags', )
.all()
)
目前没有回答
相关问题 更多 >
编程相关推荐