inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

Messages Framework

21분에 error 수정하는 부분이 잘 이해가 가지않습니다.

173

병주

작성한 질문수 7

0

제가 아직 무지한 탓에 강사님께서 오류를 수정하시는 부분이 이해가 가지않더군요,,

view.py 에서 

post_new 부분에 None 추가하는부분과

post_edit 부분에 post를 추가하는 부분에 부연설명 조금 가능하실까요?

react django docker python

답변 1

0

이진석

안녕하세요.

instagram/post_form.html 내에서 {{ Post객체.get_absolute_url }}을 수행할려면, 

Post객체의 get_absolute_url 메서드 구현을 보시면, 그 역할이 현 Post객체에 대한 detail view가 호출될 수 있는 URL 문자열을 완성하는 것인데요. 이는 DB에 저장된 Post에 대해서만 수행을 할 수 있습니다. DB에 저장되지 않은 Post은 존재하지 않는 것이기에 조회할 수가 없는 거죠.

그리고 DB에 저장된 모든 모델 객체는 self.pk 값이 1이상의 자연수값을 가집니다. DB에 저장되지 않으면 None값을 가지게 되구요.

---

instagram/post_form.html 내에서 "내용으로" 링크는

  1. 새 포스팅 쓰기 시에는 보여지지 않아야 합니다.
  2. 포스팅 수정 시에는 보여져야 합니다.

그럼 "내용으로" 링크를 보여줄 지 말지를 결정하기 위해서 form.instance 값으로 if 분기를 탔었구요.

그런데, form.instance 값은 post_new 뷰를 통한 처리에서도, post_edit 뷰를 통한 처리에서도 None이 아닌 Post 객체로 값이 지정되어있었습니다. 이는 장고 ModelForm 내부적으로 구현이 그렇게 되어있는 것이구요.

  1. post_new 뷰 구현에서의 form.instance 는 Post 객체이지만, 아직 저장되지 않은 상황입니다. 그래서 템플릿에서 {% if form.instance %} 는 항상 참(True)이 됩니다. form.instance.pk 값이 None이구요.
  2. post_edit 뷰 구현에서의 form.instance 역시 Post객체이고 DB에 저장된 상황입니다. 이때에도 템플릿에서 {% if form.instance %} 는 항상 참(True)이 됩니다. form.instance.pk 값은 1 이상의 값이 되구요.

post_new 뷰와 post_edit 뷰 모두 {% if form.instance %} 는 참(True)이기에, 위에서 말씀드린 "내용으로 링크는 새 포스팅 쓰기 시에는 보여지지 않아야 합니다." 상황에 맞지 않게 됩니다.

그래서 post_form.html 템플릿에서 post_new와 post_edit 상황을 구별할 수 있도록,

  1. post_new 뷰 구현에서는 context_data로 "post": None을 지정한 것이구요.
  2. post_edit 뷰 구현에서는 context_data로 "post": post를 지정한 것입니다.

그럼 post_form.html 템플릿에서는 {% if post %} 분기는 post_edit 시에만 수행이 되어, 포스팅 수정시에만 "내용으로" 링크를 렌더링하게 됩니다.

설명이 조금 길었는 데요. 이해하시는 데에 도움이 되셨으면 합니다.

확인해보시고 추가 질문 있으시면 언제든 편히 남겨주세요.

질문이 해결되셨으면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다. 이때 제목에 "[해결]"을 붙이시는 것이 아니라, 인프런 페이지에서 해결됨으로 변경하는 별도의 메뉴가 있습니다.

화이팅입니다. :-)

안녕하세요.

0

62

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

285

1

useEffect 훅에서 else 유무에 따른 결과

0

222

1

useAxios 훅의 dependency array 설정

0

254

1

useEffect에서 변수 업데이트 관련 질문

0

389

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

276

1

bootstrap4

0

480

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

374

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

578

3

useState는 필수일까요?

0

272

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

610

4

Django allauth를 사용한 소셜 로그인 시 에러

0

660

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

569

2

useLocalStorage() 함수 사용여부

0

238

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

454

1

리듀서의 의미 재확인

0

439

1

simple-jwt Refresh Token 사용 노하우

0

907

2

docker compose 를 통한 배포 관련 오류 문의

0

686

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

372

1

is_like_user

0

238

1

related_name 오류

0

278

1

re_path 오류

0

265

1

re_path url

0

255

1

No post matches the given query

0

671

2