Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Django ModelForm中的默认字段验证器_Django_Python 3.x - Fatal编程技术网

更改Django ModelForm中的默认字段验证器

更改Django ModelForm中的默认字段验证器,django,python-3.x,Django,Python 3.x,我有一个自定义的clean.*form方法,它可以验证上传的图像类型和文件扩展名 class TableModelForm(ModelForm): def clean_image(self): img_err = 'Unsupport image type. Please upload png, jpg or gif.' img_formats = ['png', 'jpeg', 'gif'] img = self.cleaned_data

我有一个自定义的
clean.*
form方法,它可以验证上传的图像类型和文件扩展名

class TableModelForm(ModelForm):
    def clean_image(self):
        img_err = 'Unsupport image type. Please upload png, jpg or gif.'
        img_formats = ['png', 'jpeg', 'gif']
        img = self.cleaned_data.get('image')
        if not img:
            return img
        img_fmt = img.image.format.lower()
        img_ext = splitext(img.name)[1][1:].lower()
        if any([x not in img_formats for x in [img_fmt, img_ext]]):
            raise ValidationError(ugettext_lazy(img_err), code='invalid_image')
        return img
在尝试上载适当格式但没有文件扩展名的图像之前,它工作正常,在这种情况下,
default\u validator
启动,我看到默认的
FileExtensionValidator
错误消息:

File extension '' is not allowed. Allowed extensions are: 'bmp, bufr, cur, pcx, dcx, dds, ps, eps, fit, fits, fli, flc, fpx, ftc, ftu, gbr, gif, grib, h5, hdf, png, jp2, j2k, jpc, jpf, jpx, j2c, icns, ico, im, iim, tif, tiff, jfif, jpe, jpg, jpeg, mic, mpg, mpeg, mpo, msp, palm, pcd, pdf, pxr, pbm, pgm, ppm, psd, bw, rgb, rgba, sgi, ras, tga, webp, wmf, emf, xbm, xpm'.

有没有办法在不重新声明字段的情况下替换
ModelForm
字段的
default\u validator

class TableModelForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['image'].validators = []
另一个选项可能是子类化
ImageField
并更改
default\u验证器
,然后在模型表单中使用自定义字段


我对文件字段和图像字段的内部结构不太熟悉,因此我不确定这两种方法是否有效。

您使用的是哪个版本的Django?您可能会发现,Django 1.11.2中修复的是相关的。谢谢,我正在使用
(1,11,4,'final',0)
,但不确定引用的勾号如何帮助我?