2011-05-08 7 views
0

내 데이터의 출력을 단순화하기위한 바로 가기 방법을 추가하려고합니다. 다음 코드를 작성했습니다 (불필요한 비트가 수정되었습니다).모델 메서드의 유형 오류

address_line_one = models.CharField(max_length=100) 
address_line_two = models.CharField(max_length=100, blank=True) 
address_city = models.CharField(max_length=50) 
address_state = models.CharField(max_length=50) 
address_zip = models.IntegerField() 

def address(self): 
    return self.address_line_one+" "+self.address_line_two+" "+self.address_city+" "+self.address_state+" "+self.address_zip 

이것은 간단합니다. 실행하면 다음 오류가 발생합니다.

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/srv/www/energy/energy/customers/models.py", line 83, in address 
    return self.address_line_two+" "+self.address_city+" "+self.address_state+" "+self.address_zip 
TypeError: coercing to Unicode: need string or buffer, long found 

왜이 오류가 발생합니까?

+1

dress_zip은 문자열을 연결할 때 문자열로 변환해서는 안되는 정수입니까? str (self.address_zip) –

+0

사실이긴하지만 내 문제의 출처가 아닙니다. (전에는 지퍼를 제거하려고했습니다) – MrGlass

+0

호기심에서 "return 'test'"를 시도하기로 결정했습니다. 내가 메서드 또는 무언가에 필요한 일부 구문이 누락 된 것 같아요 – MrGlass

답변

1

파이썬은 강력하게 입력됩니다. 즉, 명시 적으로 변환하지 않고 int를 문자열에 연결할 수 없음을 의미합니다.

다행히도 코드를 더 쉽게 읽을 수있을뿐만 아니라 전환을 수행 할 수있는 몇 가지 바로 가기가 있습니다. 또한 문자열 join 방법을 사용할 수 있습니다

return "%s %s %s %s %s" % (self.address_line_one, 
          self.address_line_two, 
          self.address_city, 
          self.address_state 
          self.address_zip) 

,하지만 당신은 변환해야합니다 :

첫째, 당신은 자신 문자열 리터럴에 변수을 연결 찾을 때마다, 당신은 문자열 서식을 사용하여야한다 명시 적으로 우편 정수 :

return " ".join([self.address_line_one, 
       self.address_line_two, 
       self.address_city 
       self.address_state 
       unicode(self.address_zip)]) 
+0

매우 철저하고 잘 쓰여진 답변을 주셔서 감사합니다. 불행히도, 내가 복귀 선상에 무엇을 가지고 있더라도, 나는 오류를 낳는다. 거기에 장고 문법이 누락 되었습니까? – MrGlass

0

이 시도 : 광고의 경우

def address(self): 
    return " ".join([self.address_line_one, self.address_line_two, self.address_city, self.address_state, str(self.address_zip)])