Как получить параметр запроса через форму-данные 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)})

enter image description here

Я указываю параметр, но 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, как показано на следующем изображении.

enter image description here

Вернуться на верх