일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Props
- Class
- merge
- 채팅
- EC2
- RDS
- pandas
- TypeScript
- react
- wetube
- AWS
- S3
- async
- lambda
- MongoDB
- git
- Vue
- SAA
- socket io
- NeXT
- 카톡
- crud
- SSA
- flask
- 튜플
- 파이썬
- docker
- dict
- 중급파이썬
- node
- Today
- Total
초보 개발자
(Review, Reservation , List, Conservation) model and admin 본문
(Review, Reservation , List, Conservation) model and admin
taehyeki 2022. 1. 24. 15:23Review
리뷰를 작성하는 모델이다. 먼저 앱을 등록해주고
필드를 적어주었다. 리뷰를 적는 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 해주는 것이다.
이걸 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 |