我有一個模型,可以在您上傳圖片時自動調整圖片的大小並保存原件。Django無法將float轉換爲Decimal。首先將浮點數轉換爲字符串
的問題是,當我將圖像保存在管理控制檯中,我得到這個錯誤
不能浮動轉換爲十進制。首先浮動轉換爲字符串
File "C:\o\mysite\fruit\models.py" in save
61. super(Pic, self).save(*args, **kwargs)
File "C:\Python26\lib\decimal.py" in __new__
652. "First convert the float to a string")
Exception Type: TypeError at /admin/fruit/pic/add/
Exception Value: Cannot convert float to Decimal. First convert the float to a string
我實在不明白爲什麼我得到這個錯誤
我的models.py
class Pic(models.Model):
user = models.ForeignKey(User)
image = models.ImageField(
upload_to="image",
blank=True
)
descrip = models.TextField()
ratio = models.DecimalField(decimal_places=5,max_digits=10,default=0)
def __unicode__(self):
return self.descrip
def original(self):
width = self.image.width/float(self.ratio)
height = self.image.height/float(self.ratio)
result = "<img src='/media/{0}' height='{1}' width='{2}'>".format(
self.image, height, width)
return result
def save(self, *args, **kwargs):
pw = self.image.width
ph = self.image.height
mw = 200
mh = 200
self.ratio = getWH(pw, ph, mw, mh, 'r')
super(Pic, self).save(*args, **kwargs)
if (pw > mw) or (ph > mh):
filename = str(self.image.path)
imageObj = img.open(filename)
ratio = 1
if (pw > mw):
ratio = mw/float(pw)
pw = mw
ph = int(math.floor(float(ph)* ratio))
if (ph > mh):
ratio = ratio * (mh /float(ph))
ph = mh
pw = int(math.floor(float(ph)* ratio))
width = getWH(pw, ph, mw, mh, 'w')
height = getWH(pw, ph, mw, mh, 'h')
imageObj = imageObj.resize((width, height),img.ANTIALIAS)
imageObj.save(filename)
def getWH(pw, ph, mw, mh, result):
ratio = 1
if (pw > mw):
ratio = mw/float(pw)
pw = mw
ph = int(math.floor(float(ph)* ratio))
if (ph > mh):
ratio = ratio * (mh /float(ph))
ph = mh
pw = int(math.floor(float(ph)* ratio))
if result == 'w':
return pw
elif result == 'h':
return ph
else:
return ratio