Переопределение валидации расширения Djange ImageField

Понятно, что я могу добавить валидатор к валидаторам ImageField в Django для ограничения типов расширения файлов, как показано ниже. Но что касается сообщений об ошибках, которые отображаются при загрузке в Admin - я все еще вижу стандартный список типов файлов (через PIL allowed types), если я загружаю не тип изображения. Если я загружаю тип изображения, которого нет в моем пользовательском разрешенном_расширении ниже, я вижу мое пользовательское сообщение. Как я могу переопределить стандартную обработку ImageField в Django и показать мое пользовательское сообщение об ошибке независимо от типа загружаемого файла (например, когда загружается любой файл, кроме .png, как показано ниже)?

class MM(models.Model):
    file_extension_validator = FileExtensionValidator(
        allowed_extensions=['png'],
        message='File extension not allowed. Allowed extensions include  .png'
    )

    image = models.ImageField(
        help_text='Upload images only (.png).',
        validators=[file_extension_validator],
        max_length=255,
        blank=False,
        null=False
    )

Проблема заключается не в поле модели, а в поле формы. Поле формы имеет валидатор по умолчанию, в котором перечислены все расширения, поддерживаемые PIL.

Вы можете сделать специальное поле формы ModifiedImageField и указать его для ModelForm, которое будет использоваться MyModelAdmin в данном случае:

from django.contrib import admin
from django.core.validators import FileExtensionValidator
from django import forms

image_validator = FileExtensionValidator(
    allowed_extensions=['png'],
    message='File extension not allowed. Allowed extensions include  .png'
)

class ModifiedImageField(forms.ImageField):
    default_validators = [image_validator]

class MyModelAdminForm(forms.ModelForm):
    imagefield = ModifiedImageField()

class MyModelAdmin(admin.ModelAdmin):
    form = MyModelAdminForm

где imagefield - имя ImageField, для которого вы хотите заменить валидатор.

Вернуться на верх