覆盖 Django ImageField 扩展验证
Override Djange ImageField extension validation
了解我可以向 Django 的 ImageField 验证器添加一个验证器来限制文件扩展名类型,如下所示。但就通过管理员上传显示的错误消息而言——如果我上传非图像类型,我仍然看到标准文件类型列表(通过 PIL 允许的类型)。如果我上传的图像类型不在下面的自定义 allowed_extensions 中,我会看到我的自定义消息。我如何覆盖 Django 的默认 ImageField 处理,并显示我的自定义错误消息,无论上传什么类型的文件(例如,当根据以下示例上传除 .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
<strong>image_validator</strong> = FileExtensionValidator(
allowed_extensions=['png'],
message='File extension not allowed. Allowed extensions include .png'
)
class ModifiedImageField(forms.ImageField):
default_validators = [<strong>image_validator</strong>]
class <strong>MyModelAdminForm</strong>(forms.ModelForm):
<em>imagefield</em> = <strong>ModifiedImageField()</strong>
class MyModelAdmin(admin.ModelAdmin):
form = <strong>MyModelAdminForm</strong>
其中 imagefield
是您要为其替换验证器的 ImageField
的名称。
了解我可以向 Django 的 ImageField 验证器添加一个验证器来限制文件扩展名类型,如下所示。但就通过管理员上传显示的错误消息而言——如果我上传非图像类型,我仍然看到标准文件类型列表(通过 PIL 允许的类型)。如果我上传的图像类型不在下面的自定义 allowed_extensions 中,我会看到我的自定义消息。我如何覆盖 Django 的默认 ImageField 处理,并显示我的自定义错误消息,无论上传什么类型的文件(例如,当根据以下示例上传除 .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
<strong>image_validator</strong> = FileExtensionValidator(
allowed_extensions=['png'],
message='File extension not allowed. Allowed extensions include .png'
)
class ModifiedImageField(forms.ImageField):
default_validators = [<strong>image_validator</strong>]
class <strong>MyModelAdminForm</strong>(forms.ModelForm):
<em>imagefield</em> = <strong>ModifiedImageField()</strong>
class MyModelAdmin(admin.ModelAdmin):
form = <strong>MyModelAdminForm</strong>
其中 imagefield
是您要为其替换验证器的 ImageField
的名称。