Передача переменной в фильтр 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.