django admin save_model - 为表单字段分配新值

时间:2014-10-30 17:53:35

标签: python django django-admin

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

这仍然是保存原始图像,而不是调整大小的图像。

form.cleaned_data['image_file'] = img

这条线看起来不对劲。如何将新调整大小的图像分配给表单字段?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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()