pk 질문 있습니다
#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 에서도 쓰이는데
왜 여기서 쓸수 없는지 궁금합니다
답변 2
1
안녕하세요. 장고의 기능을 많이 이해하고 응용하시고 계셔서 질문을 받고 기뻤습니다.
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
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





