인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

BH J님의 프로필 이미지
BH J

작성한 질문수

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

Django Form

return redirect(post) 에서 왜 post_detail로 넘어가는지 이해가안됩니다.

해결된 질문

작성

·

316

0

안녕하세요!

return redirect(post) 에서 왜 post_detail로 넘어가는지 이해가안됩니다.

post = form.save()에서

form data들이 DB에 저장이 되고

그것을 받아서 redirect를 하면 왜

post_detail로 화면이 넘어가나요?

그냥 form.save()가 데이터를 저장하면서 return값이 그 DB에대한 url값이라고 보면될까요?

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

redirect 함수는 내부 구현에서 resolve_url을 활용해서 이동할 주소를 얻습니다.

관련코드 : https://github.com/django/django/blob/3.2.15/django/shortcuts.py#L41

그리고 resolve_url 에서는 인자로 받는 객체에서 get_absolute_url 메서드를 지원하면 이 함수를 호출하여 url 문자열을 획득하고, 그 즉시 리턴하게 됩니다. get_absolute_url 메서드를 지원하지 않으면 URL Reverse를 진행하게 됩니다.

관련코드 : https://github.com/django/django/blob/653a7bd7b7c2f7c3ffe6b22be53da1472c491474/django/shortcuts.py#L102

그러니

  1. redirect("blog:post_list") 와 같이 호출이 된다면 "blog:post_list" 문자열에서는 당연히 get_absolute_url 메서드가 없으니 그대로 URL Reverse를 진행하게 되는 것이구요.

  2. redirect(post) 호출 시에 Post 모델에서 get_absolute_url 을 구현하지 않았다면, post는 문자열도 아니기에 오류가 발생하게 됩니다.

  3. 마지막으로 redirect(post) 호출 시에 Post 모델에서 get_absolute_url이 구현되어있다면, 이 메서드를 호출해서 반환된 URL 문자열 주소로 이동을 하게 됩니다.

충분한 답변이 되었을까요?

궁금증이 해결되셨다면 본 질문의 상태를 해결됨으로 변경 부탁드립니다.

화이팅입니다. :-)

BH J님의 프로필 이미지
BH J
질문자

와 다음 강의 듣고 있었는데

바로 답변 달아주시다니 정말감사합니다

100% 이해 완료했습니다

BH J님의 프로필 이미지
BH J

작성한 질문수

질문하기