Tengo un puñado de entradas que cada una tiene docenas de "etiquetas" cuando trato de obtener esos datos, provoca cientos de consultas. Si bien el uso de la búsqueda previa funciona en todos mis otros modelos y enlaces, no parece funcionar en esto. La publicación a continuación dice que tiene algo relacionado con la función de consulta falsa de wagtails, pero aún no se ha solucionado. ¿Hay alguna manera de utilizar etiquetas donde pueda obtenerlas a través de la API para que no creen cientos de consultas (una para cada etiqueta) que las inutilice debido a su lento tiempo de respuesta?
Cualquier ayuda que pueda proporcionar sería muy apreciada.
Se planteó un problema similar aquí, pero no obtuve respuesta . ¿Cómo precargar las etiquetas de publicación de Wagtail?
Además, cuando uso prefetch, en realidad duplica la cantidad de consultas.
Aquí está mi código:
# 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() )