Проверка Django Form Imagefield для определенной ширины и высоты - PullRequest
0 голосов
/ 04 марта 2019

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

class Adv(models.Model):

    image = models.ImageField(upload_to=r'photos/%Y/%m/',
        width_field = ?,
        height_field = ?,
        help_text='Image size: Width=1080 pixel. Height=1920 pixel',

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете сделать это двумя способами

  1. Проверка в модели

    из django.core.exceptions import ValidationError

    def validate_image(image):
        max_height = 1920
        max_width = 1080
        height = image.file.height 
        width = image.file.width
        if width > max_width or height > max_height:
            raise ValidationError("Height or Width is larger than what is allowed")
    
    class Photo(models.Model):
        image = models.ImageField('Image', upload_to=image_upload_path, validators=[validate_image])
    
  2. Очистка в формах

            def clean_image(self):
                image = self.cleaned_data.get('image', False)
                if image:
                    if image._height > 1920 or image._width > 1080:
                        raise ValidationError("Height or Width is larger than what is allowed")
                    return image
                else:
                    raise ValidationError("No image found")
    
...