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)})
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?
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.