Django/orm

Django date range

두잇 두두 2024. 2. 1. 14:19
728x90

시작 날짜와 끝 날짜 데이터를 받아와서 날짜별 필터링을 하는 것은 많은 곳에서 쓰이는 방법이다

start_date = request.query_params.get('start_date')
end_date = request.query_params.get('end_date')

filter(created_at__range=(start_date, end_date))

나도 이렇게 쿼리를 받아와서 filter을 걸었는데 필터링이 원하는 대로 하루가 되는 것이 아닌 end_date 전 날 까지만 되는 상황이 발생했다

그러한 이유는 받아오는 시간이 YYYY-mm-dd 이니까 뒤에 시간대를 00으로 잡아서 필터링 걸기 때문이였다.

그래서 날짜에 하루를 추가하던가 range는 include하게 잡으니까 lte, gt를 사용하는 방법이 있다

end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d') + datetime.timedelta(days=1)
proposals = proposals.filter(created_at__range=(start_date, end_date))

or

created_at__gte=start_date,
created_at__lt=end_date