Ошибка типа с модельным методом - PullRequest
0 голосов
/ 09 мая 2011

Я пытаюсь добавить ярлык для упрощения вывода моих данных. Я написал следующий код (ненужные биты отредактированы):

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

Почему я получаю эту ошибку?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Python строго типизирован.Это означает, что вы не можете объединить int в строку без явного ее преобразования.

К счастью, есть пара ярлыков, которые сделают преобразования, а также облегчат чтение вашего кода.

Во-первых, всякий раз, когда вы обнаруживаете, что объединяете переменные со строковыми литералами, вы должны использовать форматирование строки:

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

Вы также можете использовать метод строки join, но для этого выВам нужно будет преобразовать целое число zip явно:

return " ".join([self.address_line_one,
                 self.address_line_two,
                 self.address_city
                 self.address_state
                 unicode(self.address_zip)])
0 голосов
/ 09 мая 2011

Попробуйте это:

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