• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

안녕하세요

20.02.05 17:31 작성 조회수 77

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

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

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)라고 써줘야 합니다.