django: приведение к Unicode: нужна строка или буфер, int найден - PullRequest
2 голосов
/ 18 марта 2011

Я получаю эту ошибку при попытке суммировать два значения типа int:

if dups.count() > 0:
        for item in dups:
            pi.quantity = pi.quantity+item.quantity

Пи и Дупс являются экземплярами одной модели:

class PurchaseItem(models.Model):
    picture = models.ForeignKey(Picture, null=False)
    paperType = models.ForeignKey(paperType, null=False)
    printSize = models.ForeignKey(printSize, null=False)
    quantity = models.IntegerField(default=1, validators=[validators.MinValueValidator(1)])
    price = models.DecimalField(decimal_places=2,max_digits=8)
    dateCreated = models.DateTimeField(null=False)
    sessionKey = models.ForeignKey(Session, to_field="session_key", null=False)
    user = models.ForeignKey(User,null=True)

    def __unicode__(self):
        return self.id 

Почему int недостаточно хорош?

Если я оберну значения с помощью str () или использую их. str (), это не совсем то, что мне нужно. 1 и 1 будут до 11 вместо 2.

Ответы [ 4 ]

4 голосов
/ 18 марта 2011

Очевидно, item.quantity - это целое число, а pi.quantity - это юникод.

Я предполагаю, что pi.quantity ранее была назначена строка (которую django преобразует при сохранении в БД), но она не вернет приведенное значение, пока вы не создадите экземпляр класса снова.Значение кэшируется в соответствии с некоторыми сеансами оболочки.

Просто выполните pi.quantity = int(pi.quantity) + item.quantity или посмотрите, где было определено pi.quantity, и используйте вместо этого целые числа!

4 голосов
/ 15 ноября 2012

Ваш код: def Unicode (самостоятельно): вернуть self.id

Должно быть: def Unicode (самостоятельно): вернуть юникод (self.id)

0 голосов
/ 10 мая 2017

Просто измените последнюю строку

с

return self.id

на

return str(self.id)

0 голосов
/ 18 марта 2011

Вы пробовали

if dups.count() > 0:
    for item in dups:
        pi.quantity = pi.quantity.to_python()+item.quantity.to_python()

Это, вероятно, вызовет ту же ошибку, но стоит попробовать. Другой (ужасный ужасный ужасный) вариант заключается в следующем:

if dups.count() > 0:
    for item in dups:
        pi.quantity = int(str(pi.quantity))+int(str(item.quantity))

Но этого не следует делать, если в крайнем случае, и даже тогда еще нет, поскольку он покрывает реальную проблему, которая, вероятно, вызовет более серьезные проблемы в будущем.

Возможно ли опубликовать полную трассировку стека?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...