inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap

Post Detail 페이지 테스트 코드 작성하기

pk 질문 있습니다

해결된 질문

199

윤태영

작성한 질문수 22

0

#test.py

def
test_post_detail(self):
post_000 = create_post(
title='The first post',
content='hello wolrd.',
author=self.author_000,
)

self.assertGreater(Post.objects.count(), 0)
post_000_url = post_000.get_absolute_url()
self.assertEqual(post_000_url, '/blog/{}/'.format(post_000.pk))

response = self.client.get('/blog/{}/'.format(self.pk)) # post_000.get_absolute_url()의 소스를 가져오겠다 << 이 부분!
! self.assertEqual(response.status_code, 200)

soup = BeautifulSoup(response.content, 'html.parser')
title = soup.title # soup = html 태그 가져옴
 
# models.py
def
get_absolute_url(self):
return '/blog/{}/'.format(self.pk)

test.py에서

제가 이부분이라고 표시한 곳에서

post_000_url이나  '/blog/{}/'.format(self.pk) 나 같다고 생각해서

전자대신 후자를 넣고 테스트를 돌렸는데

AttributeError: 'Testview' object has no attribute 'pk' 가 뜨더군요


pk가 models.py 에서도 쓰이고 urls.py 에서도 쓰이는데 

왜 여기서 쓸수 없는지 궁금합니다

django python bootstrap

답변 2

1

SungYong Lee

안녕하세요. 장고의 기능을 많이 이해하고 응용하시고 계셔서 질문을 받고 기뻤습니다. 

post_000_url을 쓸 떄와 '/blog/{}/'.format(self.pk)와 다르지 않다고 판단하셨다고 했는데요. 

장고 테스트를 돌렸을 때, TestView는 pk가 없다고 답하는건 당연한 현상입니다. 

왜냐하면, TestView 안에서 self는 의미할 때는 Post를 의미하지 않고, TestView를 의미하기 때문입니다. 

반대로 Post 클래스의 get_absolute_url 함수에서 self를 썼을 때, 그 Post의 인스턴스(데이터베이스 기준에서는 레코드)를 의미합니다. self가 Blog 클래스 안에 있으니까요. 

바꾸신 스타일로 변경하길 원하신다면, '/blog/{}'.format(post_000.pk)라고 하셔야 합니다. 그렇게 하면, post_000은 Post의 인스턴스(데이터베이스 식으로 표현하면 레코드)가 되므로 self가 post_000를 의미하기 때문입니다. 

0

윤태영

self를 생각못했군요
정말감사합니다

후속 강의

0

390

1

완성했습니다. 감사합니다

0

321

2

오늘 vps 에 domain 을 지정해주고 아직 활성화되지 않았는데

0

298

1

test 결과 두 가지 error 가 발생했습니다. 뭐가 잘못된 건지 도저히 모르겠습니다.

0

421

1

accounts/login 이 존재하지 않는다고 나옵니다

0

268

2

코드 질문입니다

0

248

1

포스트에 markdown을 사용해서 이미지를 추가할때

0

310

1

New Post 관련 질문드립니다.

0

179

1

이번 영상부터 각 포스트에 프리뷰 사진이 달라지셔서 질문 드립니다.

0

334

1

base 작업한 후 Category가 블로그 하단으로 내려갔습니다.

0

253

1

혹시 소스코드 전체가 담긴 주소를 좀 알 수 있을까요?

0

264

1

9분 경 테스트에서 Assretion Error가 발생합니다.

0

234

1

파이참 초기 설치 후 설정 관련해서 git에 항상 add되는 옵션을 체크했습니다.

0

345

3

F12를 눌러 console 창에서 오류를 확인할때 몇번째 줄인지 나오지 않습니다.

0

396

1

post view도 delete하려는데 막혀서 ㅠㅠ

0

196

1

"GET / HTTP/1.1" 400 143 그리고 "GET / HTTP/1.1" 404 2031

0

3304

3

연결이 안됩니다

0

506

8

서버에 연결하고 나면 그 후에 Cmder가 작동이 안되요

0

378

2

서버에 배포후 어드민계정

0

589

2

안녕하세요! 실서버에 올린 sqlite3의 데이터를 직접 확인하려면 어찌하나요?

0

2038

3

gitignore안먹히는현상

0

292

1

cmder 종료시 서버도 같이 종료됩니다.

0

220

1

' python manage.py makemigration blog ' 명령어 에러

0

588

2

python manage.py makemigrations 를 했을 때 오류가 납니다.

0

559

2