일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 중급파이썬
- Vue
- async
- flask
- 튜플
- S3
- docker
- node
- RDS
- TypeScript
- 채팅
- 카톡
- 파이썬
- Class
- AWS
- merge
- react
- SAA
- Props
- NeXT
- wetube
- pandas
- MongoDB
- lambda
- crud
- socket io
- dict
- git
- EC2
- SSA
- Today
- Total
초보 개발자
django edit-room with UpdateView 본문
먼저 저번에 했던 것과 마찬가지로
UpdateView를 상속한 View에서 아래를 정의해주어야 한다.
model
template_name
fields
그리고 update view는 똑똑해서 url에서 pk값을 받고 위의 model에 정의한 model에서 pk값에 해당하는 data를 반환하고 그 반환하는 데이터는 form에 담기는데 그 form에는 우리가 위에서 지정한 fields가 담겨져 있다.
그리고 그 form을 template_name에 정의해놓은 html파일에서 {{ form }}을 사용하여 접근할 수 있는 것이다.
전에 user의 profile을 edit하는 경우에 자신만! 바꿀 수 있어야했다.
내가 다른사람의 profile을 바꾸는건 있을 수 없기 때문이다. 저번에는 어떤 방식을 사용했냐면
Update View를 사용하되, pk값을 주지 않았다. pk값을 주지 않으면 당연히 오류가 발생한다. 모델의 pk값에 해당하는 데이터를 찾아 반환하기 못하기 때문이다.
그 반환해주는 함수는 get_object 메서드인데, 우리는 이걸 오버라이딩하여 현재 로그인 된 유저만 return하도록 해주어서 오류를 해결해주었다. return self.request.user <<<
이번에는 방을 edit해주어야 한다. 이 역시도 마찬가지로 내가 업로드한 방만 edit이 가능해야 한다.
따라서 이번에 또 get_object라는 메서드를 오버라이딩 하여 해결해보자!!
def get_object(self)
room = super().get_object()
여기서 room을 print해보면 출력값으로 내가 현재 클릭한 방이 나온다. 그래서 나는 아래와 같이 해결해주었다.
class EditRoomView(UpdateView):
def get_object(self, queryset=None):
user = self.request.user
obj = super().get_object(queryset)
if obj in user.rooms.all():
return obj
else:
raise Http404("권한 없습니다.")
근데 더 쉽게 생각해보면 user.pk 와 obj.host.pk와 비교해주는게 더 간단한 것 같긴하다. 어떤 방법을 써도 현재 단계에선 문제가 없어보인다??
그래서 get_object를 사용해서 어떠한 방이든 return을 시켜주는 것이 아닌 내가 업로드한 방만 return하도록 오버라이딩을 해주었다.
'Python > airbnb 클론' 카테고리의 다른 글
django photo delete, edit (0) | 2022.03.21 |
---|---|
elastic beanstalk (0) | 2022.03.16 |
django class mixins (0) | 2022.03.15 |
django passwordchange with Form View (0) | 2022.03.15 |
django user-editprofile with UpdateView (0) | 2022.03.15 |