ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Create Reservation Model and Admin
    Project using python/Cloning Airbnb 2021. 2. 23. 18:34

    settings.py

    app 추가

      PROJECT_APPS에 reservation app을 추가해준다.

    settings.py

    reservations/models.py

    BookedDay Model 생성

      User가 예약을 하면 여러 날을 하게 될 때가 있다. A room을 2021.2.23 ~ 2021.2.25까지 예약을 한 경우 다른 user가 이 방을 이 날짜에 예약을 하면 안 된다. 그래서 만들어진 model이 BookedDay다. BookedDay는 user가 예약을 할 때마다, 예약된 날짜와 해당 방을 지칭하는 reservation을 가지는 model이다.

    BookedDay

    Reservation Model 생성

     이 방이 승인되었는지 여부를 가지는 status와 이 방의 예약자(guest), room과 check in & check out 날짜를 field로 가진다.

    reservation/models.Reservation

    save

    • if self.pk is None : reservation이 이미 있는지를 확인한다.
    • booked_room_existed : 예약하려는 방이 이미 예약이 되었는지의 여부를 가진다.(boolean) 해당 방에 예약이 없다면 바로 예약을 한다.
    • bookedDays : 예약하려는 방에서 예약하려는 날짜가 이미 존재하는지를 확인한다.(boolean) 해당 방에서 해당 날짜로 예약이 없다면 예약을 한다.
    • Q object : Q object는 from django.db.models import Q로 선언한다. Q object는 objects.filter를 사용할 때 좀 더 복잡한 query를 검색할 때 사용한다. Q object로 query 조건문을 묶어주고 &(AND)나 |(OR) 연산으로 추가 조건문을 줄 수 있다.

    save()

    in_progress

      in_progress()는 예약된 방이 지금 사용중인지의 여부를 나타낸다.

    • in_progress.boolean은 list_display로 표시되는 function이 boolean 값을 return할 때 True, False or None 값을 icon으로 표시해준다.
    • timezone은 django의 module이다. python에서 제공하는 datetime은 컴퓨터에 내장된 시간에 따라 달라진다. 나는 한국에 살고 있으므로 UTC기준 +9 hour다. 한국은 UTC 기준으로 9시간 빠르기 때문이다. 우리가 사용하는 앱을 미국이나 유럽에서 사용하게 된다면 예약의 오류가 생긴다. 유럽 사람은 한국에 있는 집을 2월 24일날 예약을 했는데 2월 25일날 예약이 되는 것이다. 왜냐하면 유럽에 있더라도 앱의 기준 시간은 한국이기 때문이다. 이것을 알아서 해결해주는 것이 django의 timezone이다. timezone은 settings.py에서 USE_TZ=True가 되어 있으면 시간 값을 UTC 기준으로 설정해준다. 이 부분을 사용하는 user의 지역에 따라 설정해주면 된다.
      • 시간에 관한 python 설명은 여기를 참고하라.

    in_progress
    list_display

     

    boolean 값을 True로 주지 않았을 때

    Unactivated in_progress.boolean 

    is_finished

      예약된 방의 사용이 끝났는지의 여부를 boolean 값으로 return한다. 예약된 방이 끝났으면 BookedDay에서 해당 reservation을 삭제한다.

    is_finished

    reservations/admin.py

    admin 생성

    BookedDay Admin
    Reservation Admin

    참고 자료

    소스 코드

    github.com/zpskek/airbnb-clone-v3/commit/e2a690b32cbc01e4a8f06b2f922c420c9465125f

    'Project using python > Cloning Airbnb' 카테고리의 다른 글

    django-dotenv  (0) 2021.02.24
    django mark_safe on photo admin  (0) 2021.02.24
    Create Review Model and Admin  (0) 2021.02.21
    Django TabularInline and StackedInline  (0) 2021.02.21
    Upload media  (0) 2021.02.20

    댓글

Designed by Tistory.