Как добавить предыдущее/следующее значение filter_gt или filter_lt?
У меня есть массив с несколькими значениями, включая дату_время. С помощью модуля django-url-filters я фильтрую по этому времени.
Я могу, например, вставить url:
https://URL/myws/?date_time__lte=2021-10-21T16:00:00&date_time__gte=2021-10-20T16:00:00
Моя проблема в том, что мне нужно минимальное и максимальное значение. Например, если в моей базе данных у меня есть 5 объектов:
[
{ date_time: 2021-10-01T00:00:00,
id: 1
...
},
{ date_time: 2021-10-02T00:00:00,
id: 2
...
},
{ date_time: 2021-10-06T00:00:00,
id: 3
...
},
{ date_time: 2021-10-10T00:00:00,
id: 4
...
},
{ date_time: 2021-10-20T00:00:00,
id: 5
...
}
]
Если я передаю в запросе следующие параметры:
date_time__lte=2021-10-08T00:00:00&date_time__gte=2021-10-03T00:00:00
Результатом является :
[
{ date_time: 2021-10-06T00:00:00,
id: 3
...
}
]
Но я хотел бы иметь предыдущее значение в date_time__gte и следующее значение в date_time__lte. Цель состоит в том, чтобы иметь значение для всего периода, выбранного в параметре.
Итак, я должен получить:
[
{ date_time: 2021-10-02T00:00:00,
id: 2
...
},
{ date_time: 2021-10-06T00:00:00,
id: 3
...
},
{ date_time: 2021-10-10T00:00:00,
id: 4
...
}
]
Конечно, я не могу изменить дату предыдущего значения на день - 1, потому что я не знаю заранее период между двумя значениями.
Моя функция:
def list(self, request, machine_pk=None):
only_last = self.request.query_params.get('only_last')
if not machine_pk:
raise APIException(_('missing the id of machine'))
queryset = MachineOption.objects.filter(machine__pk=machine_pk) \
.select_related('machine')
if only_last:
queryset = queryset.order_by('name', '-date_time').distinct("name")
if not self.request.user.is_staff:
queryset = queryset.filter(machine__site__client=self.user.profil.client)
queryset = self.filter_queryset(queryset)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)