[Django]-How can I do search for multiple things (full-text, geolocation etc) in DRF?

2๐Ÿ‘

โœ…

As mentioned in my comment you can apply filters to a query without it being evaluated.
This allows you to create a query based on condition like

class SearchAuctions(APIView):
    permission_classes = [AllowAny]

    def get(self, request, format=None):
        """
        Return auctions after filtering.
        """
        items = AuctionItem.objects

        if 'textToSearch' in request.data.keys():
            textToSearch = request.data['textToSearch']
            items = items.annotate(
                search=SearchVector('name', 'description'),
            ).filter(search=textToSearch)

        if 'locationToSearch' in request.data.keys():
            locationToSearch = request.data['locationToSearch']
            items = items.filter(location=locationToSearch)

        itemSerializer = AuctionItemSerializer(items, many=True)

        return Response(itemSerializer.data)

Leave a comment