Как добавить предыдущее/следующее значение 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)
Вернуться на верх