초보 개발자

django photo delete, edit 본문

Python/airbnb 클론

django photo delete, edit

taehyeki 2022. 3. 21. 16:21

Delete

 

edit room에서 photo를 지우려고한다.

urls.py에 name을 delete_photo라고 지어준 곳으로 이동시키는데, 그 뒤에 인자를 순서대로 room.pk와 photo.pk를 보낸다는 뜻이다.

 

아래는 url이다.

받아온 인자를 room_pk, photo_pk로 받아온다.

 

받아와서 이 delete_photo에게 전달해주는데 이게 조금 복잡해보일 수 있다.

먼저 user를 받아온 뒤에 room과 photo가 있는지 확인을 한다. get으로 확인하는 경우에는 찾지 못할경우 에러가 나기에 try except문으로 만들어주었다. 그래서 room이 없는 경우에는 그냥 home으로 보내버리고, photo가 없는 경우에는 현재 장소로 보낸다. 이 경우 검은색으로 글씨가 처리되어 넘어가지 않는 것 같아 보이는데 실제론 잘 동작했다.

 

다시 올라가서 만약 그 photo가 이 방의 소유가 아닌경우 즉, 다른 방의 사진을 지우려고 한경우에는 해당 방의 사진이 아니다라고 명시하면서 다시 현재 장소로 redirect시킨다.

 

그리고 마지막으로 방의 소유주와 현재 나와 일치하면 사진을 지우고 아니라면 권한이 없다고 보여준다.

 

 

 

Edit

edit에서는 photo의 제목만 바꿔보려고한다.

일단 rooms/views.py에 가서 아래와 같이 작성해준다.

model에는 현재 photo를 바꾸려고하니 Photo모델을,

template_name은 우리가 보여줄 html파일을

fields는 Photo에서 바꾸려고하는 필드명 즉 caption을 튜플형식으로,

 

기본적으로 pk라는 모델명으로 받아와야하는데 나는 아래와 같이 지정해주었다.

여기서 우리가 원하는 건 photo_pk의 값이다. 따라서 View에게 받아오는 값을 pk가 아닌

photo_pk로 받아오라고 바꿔주는 명령어를 적은 것이다. 저렇게 적으면 photo_pk에 적힌 값을 pk로 생각하여 해당 Photo을 찾아온다. 그 그걸 form에 넣고 html에게 주는 것이다. 

이렇게 한 뒤 update caption을 누르면 우리가 지정한 success_url 혹은 get_absolute_url로 이동할 텐데 우리는 지정해주지 않았다.

위에 보면 메서드로 get_success_url을 정의해준 것이 보이는데 이 이유는 우리는 rooms:photos의 url로 이동시키고 싶은데 이 url을 보면 pk값을 원한다 여기서 말하는 pk값은 room의 pk의 값이다.

그런데 우리는 저 값에 접근하려면 method의 self를 사용해야만한다. 따라서 get_success_url로 우회하여서

return해준 것이다. 저렇게 하면 잘 된다.

 

그리고 마찬가지로 get('photo_pk')로해도 photo_pk의 값을 잘 가지고 오는 것을 확인할 수 있다.

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

django session upload room  (0) 2022.03.22
django add photo with createview  (0) 2022.03.22
elastic beanstalk  (0) 2022.03.16
django edit-room with UpdateView  (0) 2022.03.16
django class mixins  (0) 2022.03.15