Django проверяет размеры ImageField и т. Д. - PullRequest
6 голосов
/ 30 сентября 2011

У меня есть собственный метод очистки ниже:

def clean_image(self):
    image = self.cleaned_data['image']
    if image:
        from django.core.files.images import get_image_dimensions
        w, h = get_image_dimensions(image)
        if not image.content_type in settings.VALID_IMAGE_FORMATS:
            raise forms.ValidationError(u'Only *.gif, *.jpg and *.png images are allowed.')
        if w > settings.VALID_IMAGE_WIDTH or h > settings.VALID_IMAGE_HEIGHT:
            raise forms.ValidationError(u'That image is too big. The image needs to be ' + str(settings.VALID_IMAGE_WIDTH) + 'px * ' + str(settings.VALID_IMAGE_HEIGHT) + 'px (or less).')
        return image

Сценарий проблемы такой:

Изображение было загружено.Теперь я хочу очистить его с помощью флажка, который появляется с помощью виджета ImageField.При отправке формы для прояснения этого условия очистка не выполняется.

Если я удаляю свой собственный метод очистки, очистка работает.Поэтому я предполагаю, что мой метод делает что-то не так.

Ответы [ 2 ]

9 голосов
/ 07 мая 2013

Есть 3 проблемы, когда django реализует эту проверку:

  1. Джанго нужно получить значение этого поля, всегда нужно вернуть значение
  2. Нужно поставить класс Meta с именеммодель, которую вы использовали.
  3. В этих предложениях нужно поставить. get this way

    self.cleaned_data.get['image']
    
  4. Код выглядит следующим образом:

    class Meta: 
        model = NameModel    
    
    def clean_image(self):
        image = self.cleaned_data.get['image']
        if image:
            from django.core.files.images import get_image_dimensions
            w, h = get_image_dimensions(image)
            if not image.content_type in settings.VALID_IMAGE_FORMATS:
                raise forms.ValidationError(u'Only *.gif, *.jpg and *.png images are allowed.')
            if w > settings.VALID_IMAGE_WIDTH or h > settings.VALID_IMAGE_HEIGHT:
                raise forms.ValidationError(u'That image is too big. The image needs to be ' +     str(settings.VALID_IMAGE_WIDTH) + 'px * ' + str(settings.VALID_IMAGE_HEIGHT) + 'px (or less).')
        return image
    
0 голосов
/ 30 сентября 2011

Я думаю, что это не возвращает изображение из cleaned_data. Вы должны это проверить, потому что ваша кодировка выглядит хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...