2014-10-30 3 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

+0

Другое место, где вы можете сделать что-то подобное, находится на форме. Напишите свою собственную форму с пользовательской проверкой: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#admin-custom-validation – Ngenator

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