에어비앤비 클론 코딩 중,
원하는 기간에 예약이 가능한 숙소를 검색하는 기능을 구현하려고한다.
로직은 아래와 같다.
- 유저가 원하는 체크인 날짜가 숙소의 예약 기간에 있는지 확인하고 제외한다.
(숙소 체크아웃 날짜에는 체크인이 가능하다! - D숙소 case)- 예약된 숙소의 체크인 날짜가 유저가 원하는 예약 기간 사이에 있는지 확인하고 제외한다.
(1번과 같이 유저가 원하는 체크아웃 날짜는 예약된 숙소 체크인과 동일해도 된다. - C숙소 case)
위와 같은 예시에서 로직을 통과할 경우, 예약가능한 숙소는
C,D,F 숙소가 검색될 것이다.
구현해보기 위한 filter/ exclude 옵션을 알아보자.
- gt: 초과 / lt: 미만 / gte: 이상 / lte:이하
- range: [x,y] x,y 사이에 있는 값을 호출
코드
new_checkout = datetime.strptime(checkout, "%Y-%m-%d").date() - timedelta(1)
date_filtered_products = address_filtered_products.exclude(
(Q(booking__check_out__gt = checkin) & Q(booking__check_in__lte = checkin)) |
Q(booking__check_in__range = [checkin, new_checkout])
)
추가로 주소 검색, 예약 인원 제한의 옵션을 추가할 예정이다.
👍