django:强制转换为Unicode:需要字符串或缓冲区,找到int

时间:2011-03-17 21:20:51

标签: django math unicode model

我在尝试总结两个int值时遇到此错误:

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

pi和dup都是同一型号的实例:

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 个答案:

答案 0 :(得分:4)

显然,item.quantity是一个整数,pi.quantity是unicode。

我猜测pi.quantity之前已经分配了一个字符串(django会在db保存时转换),但是在你再次实例化该类之前它不会返回强制值。根据一些shell会话缓存该值。

只需执行pi.quantity = int(pi.quantity) + item.quantity或查看定义pi.quantity的位置,然后使用整数!

答案 1 :(得分:4)

您的代码:     def unicode (个体经营):         return self.id

应该是:     def unicode (个体经营):         return unicode(self.id)

答案 2 :(得分:0)

你试过吗

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))

但除非不得已,否则不应该这样做,即使那时仍然没有,因为它掩盖了实际问题,这可能会在未来发生更严重的问题。

任何机会,是否可以发布完整的堆栈跟踪?

答案 3 :(得分:-1)

只需更改最后一行

<强>从

return self.id

return str(self.id)