Передача переменной в фильтр Django Rest Framework

Я использую фильтр в моем проекте Django Rest Framework для поиска элементов в заданном диапазоне дат. Я хотел бы передавать переменные в url следующим образом: /?start_date=2022-12-01&end_date=2022-12-06 но я не могу понять, как вставить 'start_date' и 'end_date' в качестве переменных для поиска. Фильтр работает, когда я делаю

queryset = Search.objects.filter(added_date__range=["2022-12-06", "2022-12-06"])

но я бы хотел, чтобы это было что-то вроде:

queryset = Search.objects.filter(added_date__range=[start_date, end_date])

Вот модель:

class Search(models.Model):
    added_date = models.CharField(max_length=256)
    added_time = models.CharField(max_length=256)
    id = models.BigIntegerField()
    name = models.CharField(max_length=256)

Вид:

class SearchViewSet(generics.GenericAPIView):

    def get_queryset(self):
        try:
            Search.objects.filter(added_date__range=[self.start_date, self.end_date])
        except Exception as exception:
            return Response(response500('No Data Found', exception), status=status.HTTP_500_INTERNAL_SERVER_ERROR)

    def get(self, request):
        self.start_date = request.GET['start_date']
        self.end_date = request.GET['end_date']

        try:
            queryset = self.get_queryset()
            search_data = SearchSerializer(queryset, many=True)
            resp = {'data': search_data.data}
            response = Response(resp)
            return response
        except Exception as exception:
            return Response(response500('No Data Found', exception), status=status.HTTP_500_INTERNAL_SERVER_ERROR)

Url:

re_path(r'search-summary', views.SearchViewSet.as_view(), name='search-summary')

В представлениях, основанных на классах, можно использовать self.request.query_params.get(). так, например:

def get_queryset(self):
    start_date= self.request.query_params.get('start_date')
    end_date = self.request.query_params.get('end_date')
    try:
        Search.objects.filter(added_date__range=[start_date, end_date])
    except Exception as exception:
        return Response(response500('No Data Found', exception), status=status.HTTP_500_INTERNAL_SERVER_ERROR)

Если вам нужно использовать их в другом месте, то вы должны быть в состоянии использовать тот же метод в get() для добавления их в self.

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