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
'Django > orm' 카테고리의 다른 글
Dynamdb() Scan vs query (0) | 2024.02.06 |
---|---|
DynamoDB() (0) | 2024.02.05 |
F() (0) | 2024.01.24 |
len() vs count() (0) | 2024.01.19 |
두 가지 조건을 exclude 시 and 연산 (0) | 2024.01.17 |