diff --git a/apps/collection/models.py b/apps/collection/models.py index 4960839a..c5d55848 100644 --- a/apps/collection/models.py +++ b/apps/collection/models.py @@ -174,7 +174,27 @@ class GuideQuerySet(models.QuerySet): def with_extended_related(self): """Return QuerySet with extended related.""" - return self.with_base_related().prefetch_related('guideelement_set') + return ( + self.with_base_related() + .prefetch_related( + models.Prefetch( + 'guideelement_set', + queryset=GuideElement.objects.select_related( + 'guide_element_type', + 'establishment', + 'review', + 'wine_region', + 'product', + 'city', + 'wine_color_section', + 'section', + 'guide', + 'parent', + 'label_photo', + ) + ) + ) + ) def by_country_id(self, country_id): """Return QuerySet filtered by country id.""" @@ -256,10 +276,7 @@ class GuideQuerySet(models.QuerySet): def annotate_present_objects_counter(self): """Return QuerySet with annotated field - present_objects_counter.""" return ( - self.annotate_restaurant_counter() - .annotate_shop_counter() - .annotate_wine_counter() - .annotate( + self.annotate( present_objects_counter=( models.F('restaurant_counter') + models.F('shop_counter') + diff --git a/apps/collection/serializers/common.py b/apps/collection/serializers/common.py index c42409df..5e89b2b8 100644 --- a/apps/collection/serializers/common.py +++ b/apps/collection/serializers/common.py @@ -107,10 +107,10 @@ class GuideBaseSerializer(serializers.ModelSerializer): guide_filters = GuideFilterBaseSerializer(read_only=True, source='guidefilter') # counters - restaurant_counter = serializers.IntegerField(read_only=True) - shop_counter = serializers.IntegerField(read_only=True) - wine_counter = serializers.IntegerField(read_only=True) - present_objects_counter = serializers.IntegerField(read_only=True) + # restaurant_counter = serializers.IntegerField(read_only=True) + # shop_counter = serializers.IntegerField(read_only=True) + # wine_counter = serializers.IntegerField(read_only=True) + # present_objects_counter = serializers.IntegerField(read_only=True) count_objects_during_init = serializers.IntegerField(read_only=True, source='count_related_objects') @@ -130,10 +130,10 @@ class GuideBaseSerializer(serializers.ModelSerializer): 'state', 'state_display', 'guide_filters', - 'restaurant_counter', - 'shop_counter', - 'wine_counter', - 'present_objects_counter', + # 'restaurant_counter', + # 'shop_counter', + # 'wine_counter', + # 'present_objects_counter', 'count_objects_during_init', ] extra_kwargs = { diff --git a/apps/collection/views/back.py b/apps/collection/views/back.py index ffe6ca72..fabc8eb7 100644 --- a/apps/collection/views/back.py +++ b/apps/collection/views/back.py @@ -29,8 +29,11 @@ class GuideBaseView(generics.GenericAPIView): permission_classes = get_permission_classes() def get_queryset(self): - """Overridden get_queryset method.""" - return models.Guide.objects.with_extended_related().annotate_counters() + """An overridden get_queryset method.""" + return ( + models.Guide.objects.with_extended_related() + # .annotate_counters() + ) class GuideFilterBaseView(generics.GenericAPIView):