我在尝试总结两个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。
答案 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)