我有一个模型,可以在您上传图片时自动调整图像大小并保存原件。
问题是,当我在管理面板中保存图像时,出现此错误
无法将浮点数转换为十进制。首先将浮点数转换为字符串
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
我只是想不通为什么我会收到这个错误
我的模型.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