Search code examples
pythondjangodjango-viewsdjango-class-based-views

How to get query parameter through form-data postman in django


I have this viewset which should return certian results when i give query param week, month or year.

class TotalOrdersViewset(viewsets.ModelViewSet):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer
    def list(self, request, *args, **kwargs):
        try:
            type = request.data.get('type')
            print('type= '+str(type))
            if type is None:
                return Response({"success": False, "message": "type param describing month or week is missing."}, status=400)
            if type == 'month':
                qs = Order.objects.filter(date__month=datetime.now().month).count()
                return Response({'Number of orders this month': qs})
            elif type == 'year':
                qs = Order.objects.filter(date__year=datetime.now().year).count()
                return Response({'Number of orders this year': qs})
            elif type == 'week':
                TODAY = date.today()
                start = TODAY - timedelta(days=TODAY.weekday())
                end = start + timedelta(days=6)
                qs = Order.objects.filter(date__range=(start, end)).count()
                return Response({'Number of order this week': qs})
            else:
                return Response({})
        except Exception as e:
            return Response({'error':str(e)})

enter image description here

I am specifying parameter but request.data.get is not accessing it.

I have also tried request.session.get and request.POST.get.

Can somebody tell me where I am wrong?


Solution

  • After doing some research and trying different things I got answer.

    We need to use viewsets.ViewSet instead of viewsets.ModelViewSet.

    Then we will request query_params

    At last the code will look like:

    class TotalOrdersViewset(viewsets.ViewSet):
        serializer_class = OrderSerializer
        def list(self, request):
            try:
                params = self.request.query_params
                type = params.get('type')
                print('type = '+str(type))
                if type is None:
                    return Response({"success": False, "message": "type param describing week, month or year is missing."}, status=400)
                elif type == 'month':
                    qs = Order.objects.filter(date__month=datetime.now().month).count()
                    return Response({'Number of orders this month': qs})
                elif type == 'year':
                    qs = Order.objects.filter(date__year=datetime.now().year).count()
                    return Response({'Number of orders this year': qs})
                elif type == 'week':
                    TODAY = date.today()
                    start = TODAY - timedelta(days=TODAY.weekday())
                    end = start + timedelta(days=6)
                    qs = Order.objects.filter(date__range=(start, end)).count()
                    return Response({'Number of order this week': qs})
                else:
                    return Response({})
            except Exception as e:
                return Response({'error':str(e)})
    

    In postman we will enter type in Params as shown in following image.

    enter image description here