2017-10-17 6 views
1

私はカスタムclean_*フォームメソッドを持っています。これはアップロードされたイメージタイプとファイル拡張子を検証します。Django ModelFormの既定のフィールドバリデーターを変更する

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_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_validatorをフィールドを再宣言することなく置き換える方法がありますか?

+0

あなたはどのバージョンのDjangoを使用していますか? Django 1.11.2で修正された[ticket#28242](https://code.djangoproject.com/ticket/28242)が見つかるかもしれません。 – Alasdair

+0

ありがとう、私は '(1、11、4、 'final'、0)'を使用していますが、参照されたダミーがどのように役立つのかはわかりません。 –

答えて

1

フォームの__init__メソッドでフィールドのvalidatorsを空のリストに設定しようとします。

class TableModelForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.fields['image'].validators = [] 

別のオプションは、カスタムフィールドは、モデルの形で使用し、その後、ImageFieldをサブクラス化し、default_validatorsを変更することがあるかもしれません。

私はファイルフィールドとイメージフィールドの内部をよく知っているわけではないので、どちらのアプローチでも動作するかどうかはわかりません。

関連する問題