'I need to apply the values_list() function to queryset after filtering

Following is my View Class:

from apps.embla_services.filters import RentPostFilters
from django_filters import rest_framework as filters
from apps.embla_services.models import RentPost
from apps.embla_services.serializers import RentPostBriefSerializer

class SearchRentPosts(generics.ListAPIView):

def get_queryset(self):
    city = self.request.query_params.get("city")
    if city:
        return RentPost.objects.filter(city__name=city)

    else:
        return RentPost.objects.all()

serializer_class = RentPostBriefSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = RentPostFilters

Following is my Filter Class:

from django_filters import rest_framework as filters
from apps.embla_services.models import RentPost

class RentPostFilters(filters.FilterSet):

title = filters.CharFilter(lookup_expr="icontains")
is_available = filters.BooleanFilter()
rent_type = filters.ChoiceFilter(choices=RentPost.RentTypeChoices.choices)
category__id = filters.NumberFilter()
available_from = filters.DateFromToRangeFilter()
price = filters.RangeFilter()

class Meta:
    model = RentPost
    fields = ["title", "is_available",
              "rent_type", "category", "available_from", "price"]

Following is my Serializer Class:

from apps.embla_services.models import RentPost

class RentPostBriefSerializer(serializers.ModelSerializer):
uploaded_media = FileSerializer(source='media', many=True, read_only=True)
category = serializers.CharField(source="category.title")
is_expired = serializers.SerializerMethodField()

def get_is_expired(self, obj: RentPost):
    if obj.available_To and obj.available_To < date.today():
        return True

    return False

class Meta:
    model = RentPost
    fields = ["id", "available_from", "title", "created_at", "latitude", "longitude",
              "is_available", "uploaded_media", "delivery", "price", "rent_requests", "is_available", "is_expired", "city","category"]

What i want is that after all the filters are applied to queryset, i can split this queryset into sub arrays depending upon the category.

For example if query set contains 30 items of 3 different categories (10 items in each category). i want the response that is sent to user contains 3 arrays (1 for each category) with 10 items. is this possible?? if yes how. Apologies for my english and noobness. I am Nodejs dev and due to client insistence doing this project on DRF.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source