초보 개발자

raw_ids ,inline Admin, save() 본문

Python/airbnb 클론

raw_ids ,inline Admin, save()

taehyeki 2022. 1. 26. 15:08

raw_ids fields는 foreign key를 좀 더 나은 방법으로 볼 수 있게 해준다.

Room Admin에 위와 같은 코드를 작성해주면

더이상 리스트로 보이지 않고 user admin로 검색할 수 있게 해준다. 만약 user가 엄청 많아진다면 전처럼 리스트에서 고르는건 힘들 것이다.

 

InlineModelAdmin

admin안에 또 다른 admin을 넣는 방법이다.

 

우리는 Photo모델을 만들고 그 모델 안에서 제목, 파일, 룸(foreign key)을 지정해주는 식으로 하였다.

 

따라서 방에 사진을 올리기 위해선 방에서 올리는 것이 아닌, 포토 모델에서 따로 올려주어야 하였다.

 

근데 이 분리된, 모델을 하나로 합칠 수 있는 방법이 바로 인라인모델어드민이다. admin.py에서

새로운 클래스 하나를 만들어 준다. 상속받는 곳을 잘 보자 그리고 그 안에 model을 정의하고 그 안에는 Photo모델을 가져왔다.

그 뒤 RoomAdmin에 inlines에 튜플형식으로 우리가 만든 클래스를 정의해주면

Room아래에 바로 아래와 같은 입력창이 생겼다. 여기서 파일을 생성하면 우리가 따로 forein key를 지정해주지 않아도 자동으로 해당 방의 foreign key를 가지고 있다. 그 이유는 우리의 변수 지정 방식때문이라고 한다.

photo의 내의 room변수와

Room모델의 이름 Room이 같아서 라고 했는데 이 부분은 잘 모르겠다. 아마 foreign key를 보고 이어준 것이 아닌가? 아무튼 이어졌따.. 대박신기...

이와 같이 User와 Room을 이어줘보았다.

user의 아래에 room이 생성된 것을 알 수 있다. 간단하게 서로 foreign key로 이어진 두 모델을 inlineadmin을 통해서 이어줄 수 있었다.

.

save() overiding

 

장고의 모든 모델들은 save() method를 가지고 있다.

이 안의 내용들은 이전 것이 아니라 새로 바뀌는 것이 온다.

 

models.Room에서 save()를 오버로딩하여 기존의 기능을 사용하고, self.city = self.city.title()이라고 설정하면

어드민, 콘솔등에서 save버튼을 누르면 무조건 city는 첫글자가 대문자로 설정이 된다. 

 

rooms.model.Room

아래와 같이 저장하고 save를 누르면

.

이와 같이 바뀌어 저장이 되어있다.

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

url, views  (0) 2022.02.05
django-seed  (0) 2022.02.04
photo model  (0) 2022.01.26
queryset , manytomany  (0) 2022.01.25
Room admin, query_set 1  (0) 2022.01.24