Переопределение валидации расширения 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
, для которого вы хотите заменить валидатор.