강의

멘토링

커뮤니티

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

상빵님의 프로필 이미지
상빵

작성한 질문수

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

Post Detail 개선사항 도출하고 Test 코드 만들기

안녕하세요

작성

·

144

0

def test_post_detail(self):

''''''''''

self.assertIn(category_politics.name, main_div.text)

>> 여기에서 category_politics라고만 하면 왜 안될까요?

create_tag() 할때 Tag모델 가져오는데, 해당 모델에 아래와 같이
name으로 객체를 표현하는 함수가 있더라구요.
def __str__(self):
return self.name

그렇다면 category_politics만 해도 name이 호출되야 할텐데
그게 아니라서 질문드립니다

답변 1

0

SungYong Lee님의 프로필 이미지
SungYong Lee
지식공유자

이 내용은 클래스, 인스턴스에 대한 공부가 약간 필요할 것 같습니다. 

category_politics 는 Category 클래스(장고에서는 모델로 부릅니다.)의 인스턴스입니다. category_politics의 자료형은 Category이죠. 

그리고 main_div.text의 자료형은 str(텍스트) 입니다. 

따라서 자료형이 다르므로 assertEqual로 비교하면 다르다는 결과가 나오는 것이죠. 

물론 template(HTML 파일)에서 { category_politics } 라고 쓰면 category_politics의 name이 출력됩니다.  template에서 category_politics라고 쓴다면 string 형태로 HTML 파일에 박아야 하므로 __str__ 함수를 이용하게 되죠. 그러나 파이썬 안에서는 다릅니다. 파이썬 안에서 category_politics 인스턴스를 강제로 str(텍스트) 형태로 바꿔주고 싶다면, str(category_politics)라고 써줘야 합니다. 

상빵님의 프로필 이미지
상빵

작성한 질문수

질문하기