Как получить параметр запроса через форму-данные postman в django
У меня есть набор представлений, который должен возвращать определенные результаты, когда я задаю запрос с параметрами недели, месяца или года.
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)})
Я указываю параметр, но request.data.get не получает к нему доступа.
Я также пробовал request.session.get и request.POST.get.
Может ли кто-нибудь сказать мне, где я ошибаюсь?
Спасибо!
Я запустил ваш код на своей машине, и он работает нормально.
from datetime import datetime
from django.shortcuts import render
from rest_framework import viewsets
from rest_framework.response import Response
from user.models import Order
class TotalOrdersViewset(viewsets.ModelViewSet):
queryset = Order.objects.all()
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)})
Можете, пожалуйста, описать вашу проблему немного подробнее.
ПРИМЕЧАНИЕ: Пожалуйста, не используйте тип в качестве переменной в коде python, поскольку он является встроенным ключевым словом.
После проведения некоторых исследований и пробования различных вещей я получил ответ.
Нужно использовать viewsets.ViewSet вместо viewsets.ModelViewSet.
Затем мы запросим query_params
Наконец, код будет выглядеть так:
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)})
В postman мы введем type в Params, как показано на следующем изображении.