2014-10-30 43 views
1
def save_model(self, request, obj, form, change): 
    basewidth = 650 
    img = PIL.Image.open(form.cleaned_data['image_file']) 

    if img.size[0] > basewidth: 
     wpercent = (basewidth/float(img.size[0])) 
     hsize = int((float(img.size[1]) * float(wpercent))) 
     img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) 

     form.cleaned_data['image_file'] = img 

     form.save() 
    else: 
     form.save() 

这仍然保存原始图像,而不是调整大小。django admin save_model - 为表单字段分配新值

form.cleaned_data['image_file'] = img 

这条线看起来不对。我怎样才能分配新的调整大小的图像形式领域?

回答

1

如果您查看文档https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model,您可以看到obj是模型实例。您需要更改obj.your_image_field而不是表单域。

+0

呀已经试过了。没有成功的迹象 – doniyor 2014-10-30 19:00:28

+0

其他地方,你可以做这样的事情是在窗体上。使用自定义验证编写自己的表单:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#admin-custom-validation – Ngenator 2014-10-30 20:18:57

0

@Ngenator说的是正确的。它不是为你工作的原因是,你也需要改变form.save()来obj.save()

这里是我肯定会做它的代码:

def save_model(self, request, obj, form, change): 
    basewidth = 650 
    img = PIL.Image.open(obj.image_file) 

    if img.size[0] > basewidth: 
     wpercent = (basewidth/float(img.size[0])) 
     hsize = int((float(img.size[1]) * float(wpercent))) 
     img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS) 
     obj.image_file = img 

    obj.save()