일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- NeXT
- Class
- RDS
- 카톡
- flask
- lambda
- git
- crud
- SAA
- EC2
- pandas
- AWS
- 파이썬
- wetube
- Vue
- merge
- SSA
- S3
- 중급파이썬
- MongoDB
- TypeScript
- react
- dict
- docker
- socket io
- node
- async
- 채팅
- 튜플
- Today
- Total
초보 개발자
django session upload room 본문
session에 정보를 넣어 현재 사용자의 상황?에 따라 다르게 페이지를 보이도록 할 수 있다.
먼저 start hosting, stop hosting 이 두 버튼을 만들어보겠다.
nav.html인데 여기서 만약 세션에 is_hosting이라는 것이 있다면 Stop 없다면 Start로 보이도록 해주었고,
아래를 보면 세션에 is_hosting이 있는 경우에 Upload Room을 클릭할 수 있도록 해주었다,
아래와 같이 url을 설정해주고
view에는 try except를 사용하여 하나의 함수만으로도 동작할 수 있도록 하였다.
del request.session['asdfasdf'] 은 session의 내용을 지우는 역할이고
request.session['asdfasdf']는 세션에 내용을 넣는 역할이다. 만약 세션에 없는 데 접근하면 에러가 나기에 try except문을 활요하였다.
upload room의 url을 만들었다.
그리고 Upload room의 View는 아래와 같다.
따로 form을 생성하지 않고 CreateView안에서 form.save(commit=False)를 해주었더니 잘 되었다.
하지만 여기서 실제 화면에 들어가보면 many to many로 지정되어있는 amenities, facilities, house_rules같은 경우에는 저장이 안 된 것을 확인할 수가 있다. 우리가 form.save(commit=False)로 해준 것은 모델을 생성했지만 저장은 하지 않은 경우이다. 따라서 특정한 정보를 추가로 넣고 싶을 때 이러한 방법을 사용했다.
여기서 form.save_m2m()이라는 메서드를 해주어야한다. 그래야 form에서 받아온 many to many가 제대로 저장이 된다.
commit=False로 한 경우에는 반드시 save()를 한 뒤에 form.save_m2m()을 적어주어야한다.
이제서야 아래와 같이 잘 출력이 된다. 명심하자 !!
form에 없는 정보를 넣기 위해 form.save(commit=False)로 한 경우에 many to many가 있는 경우 save()를 한 뒤에 save_m2m()을 한번 더 해주어야 한다. 근데 여기서 room이아닌 form에 해주는 건 조금 신기하긴 한데 일단 넘어가자!!
'Python > airbnb 클론' 카테고리의 다른 글
django custom template filter (0) | 2022.03.26 |
---|---|
django add photo with createview (0) | 2022.03.22 |
django photo delete, edit (0) | 2022.03.21 |
elastic beanstalk (0) | 2022.03.16 |
django edit-room with UpdateView (0) | 2022.03.16 |