초보 개발자

(Review, Reservation , List, Conservation) model and admin 본문

Python/airbnb 클론

(Review, Reservation , List, Conservation) model and admin

taehyeki 2022. 1. 24. 15:23

Review

 

리뷰를 작성하는 모델이다. 먼저 앱을 등록해주고

필드를 적어주었다. 리뷰를 적는 review와 평점을 적는 것들 그리고 user와 room을 foreign key로 받아왔다.

Room(1)과 Review(N)가 ForeignKey 로 연결되어 있는 상태이다. N의 입장에서 ForeignKey를 설정 해 주었다.

만약 N의 입장에서 Room의 정보에 접근하고 싶다면 어떻게 해야할 까?  self.room.country 이런 식으로 접근 가능하다.

self.room만 적어주면 Room의 __str__ 함수가 실행이 되어 room.name이 자동으로 출력이 되는 것이다. 이를 

makemigrations와 migrate를 하고 admin에 등록해주자

 

그리고 모델안에서 함수를 생성할 수 있다. 평점의 평균을 만들어 주는 함수를 만들어 보겠다. 어드민 패널에서도 만들 수 있지만 거기서 만들면 어드민에서만 볼 수 있으니 전체가 다 볼 수 있기 위해서 모델안에서 정의를 해준 것이다.

모델에 쓰는 기준은 이 기능이 여기저기 반복이 되거나, 프론트엔드와 어드민에서 이 기능을 사용하고 싶기에 model 에 두면 다 사용할 수 있다. admin에 다음과 같이 적어주면 review.model안에 정의된 __str__과 get_avg의 리턴 값을 잘 display해 주는 것을 확인할 수 있다. 

모델에서 정의한 함수(__str__ get_avg)를 admin에서 사용할 수 있다는 것이 신기하다

이걸 추가해주면

아래와 같이 바뀌기도 한다.

그럼 모든 리뷰들을 더해서 나누면 room의 평균이 될 것이다. 이 것도 한번 만들어 보자. 먼저 room에서 아래의 코드를 작성해주자. self는 자기 자신이니까 자신의 방의 reivews(related_name)의 모든 것을 불러와서 그 평점들을 나눠준뒤 return 해주는 것이다.

rooms.models.Room

이걸 RoomAdmin에 추가해주면 

rooms.admin.RoomAdmin

이렇게 나타나는 것을 확인할 수 있다.

여기서 알 수 있는 점. admin에서 정의한 함수가 아니고 model에서 정의한 함수이더라도 admin에서 사용할 수 있다. 

사용할 때 단순히 함수 이름만 적어주면 된다. 그럼 필드명은 대문자 함수명이되고, 모든 행에 걸쳐 정의한 함수내용이 적용이 된다. 

Reservation

필드는 예약 상태인 status, 체크인, 아웃 날짜, 예약한 사람, 예약된 방 이렇게 해주었다.

숙박일인지, 지났는지 확인하는 함수를 만들었다.

in_progress.boolean = True로 하면 아래와 같이 그림으로 표시되고, 주지 않으면 True, False라고 표시된다

위에서 설명했듯이 in_progress와 is_finished는 함수이다. 함수를 list_display에적으면 그 행(데이터)에 해당하는 자료로 함수를 돌려서 return 값을 적는다. 따로 import 해주지 않아도 된다.

 

List

리스트는 자기가 다녀왔던 방 목록인 거 같다.

이름이 어떻게 보일지에 대한 __str__과 count_room함수를 만들어 admin에서 사용하였다.

Conservation, Message

방 이름을 참가 인원의 이름으로 하려고했다. participants는 manytomany관계이므로 쉽게 접근할 수 있었다. 이를 통해 구해오면 queryset에 담겨오고 하나하나 배열에 집어넣은 뒤 join 메서드를 통해서 str화 시켜주었다. __str__은 return값이 str이 아니면안된다. 그리고 messges의 수와 participants의 수를 구해주었다. messages는 역참조를 하는 것이다. 해당 conversation의 foreign key를 가리키고 있다면 그 숫자를 모두 더한 것이다.

메시지이다. 메시지를 작성한 유저, 그리고 그 메시지가 속한 방, 그리고 메시지

'Python > airbnb 클론' 카테고리의 다른 글

queryset , manytomany  (0) 2022.01.25
Room admin, query_set 1  (0) 2022.01.24
room model, 다대다 일대다 관계  (0) 2022.01.23
User admin패널 활용 및 User Model 완성  (0) 2022.01.23
field옵션들, default, choices, blank, null  (0) 2022.01.22