21분에 error 수정하는 부분이 잘 이해가 가지않습니다.
173
작성한 질문수 7
제가 아직 무지한 탓에 강사님께서 오류를 수정하시는 부분이 이해가 가지않더군요,,
view.py 에서
post_new 부분에 None 추가하는부분과
post_edit 부분에 post를 추가하는 부분에 부연설명 조금 가능하실까요?
답변 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 내에서 "내용으로" 링크는
- 새 포스팅 쓰기 시에는 보여지지 않아야 합니다.
- 포스팅 수정 시에는 보여져야 합니다.
그럼 "내용으로" 링크를 보여줄 지 말지를 결정하기 위해서 form.instance 값으로 if 분기를 탔었구요.
그런데, form.instance 값은 post_new 뷰를 통한 처리에서도, post_edit 뷰를 통한 처리에서도 None이 아닌 Post 객체로 값이 지정되어있었습니다. 이는 장고 ModelForm 내부적으로 구현이 그렇게 되어있는 것이구요.
- post_new 뷰 구현에서의 form.instance 는 Post 객체이지만, 아직 저장되지 않은 상황입니다. 그래서 템플릿에서 {% if form.instance %} 는 항상 참(True)이 됩니다. form.instance.pk 값이 None이구요.
- 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 상황을 구별할 수 있도록,
- post_new 뷰 구현에서는 context_data로 "post": None을 지정한 것이구요.
- 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





