초보 개발자

django add photo with createview 본문

Python/airbnb 클론

django add photo with createview

taehyeki 2022. 3. 22. 18:57

createview를 사용하여 photo를 추가하려고한다. create view를 사용하여 아래와 같이 만들어 준 뒤

아래와 같이 잘 뜨는 것을 확인할 수 있는데 우리는 Photo모델에서 foreign key로 room을 지정해주도록 해야한다.

하지만 현재 create view가 제공해주는 기본 form으로는 room을 지정해줄 수가 없다. 

따라서 직접 form을 만든 뒤에 form의 save를 override해주는 방식을 사용해야한다. 

ModelForm을사용해서 아래와 같이 만들어주었다.

save함수를 잘보면 인자로 pk값을 받아와서 그걸로 room을 찾는 역할을 한다.

 

form이 정상이라면 form_valid이 실행이된다. pk값은 여기서 밖에 구하지 못한다. form에서는 구할 수 없다. 

따라서 여기서 pk값을 form의 save로 보낸다. form에서는 그 pk값으로 room을 찾은 뒤 photo.room에 넣어준 후 다시 save를 한다. 이렇게 해서 만들 수 있었다.

 

근데 createview를 사용해도 아래와 같이 하면 만들 수 있을 것 같긴 하다.

python - How to set ForeignKey in CreateView? - Stack Overflow

 

How to set ForeignKey in CreateView?

I have a model: class Article(models.Model): text = models.CharField() author = models.ForeignKey(User) How do I write class-based view that creates a new model instance and sets author f...

stackoverflow.com

 

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

django custom template filter  (0) 2022.03.26
django session upload room  (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