'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 |
---|