3

画像をアップロードするためのフォームがあります。

form の特定のフィールド属性をクリーニングするための Django の標準に従う場合、これは私の clean メソッドが通常どのようになるかを示します。

class UploadImagesForm(forms.Form):
    image = forms.FileField()

    def clean_image(self):
        file = self.cleaned_data['image']
        if file:
            if file._size > 15*1024*1024:
                raise forms.ValidationError("Image file is too large ( > 15mb ).")
            return file
        else:
            raise forms.ValidationError("Could not read the uploaded file.")

ただし、同じウィジェットを使用して複数の画像を一度にアップロードできるフォームを使用しています (つまり、ユーザーは Shift キーを押しながらクリックして、ファイル ブラウザーで複数のファイルを選択できます)。したがって、ビューまたはハンドラーでファイルにアクセスする必要があるときはいつでもrequest.FILES.getlist('images')、for ループのようなものを使用します。このフィールドのきれいなメソッドをどうやって書くのですか?? 道に迷いました。

これが私のフォームの外観です。

class UploadImagesForm(forms.Form):
    images = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 'multiple'}))

上記のコードの最初のブロックに示されているように、フィールドの clean メソッドで、送信された各ファイルのファイル サイズを確認したいと思います。

4

1 に答える 1

10

self.files.getlist('images')inメソッドを使用しcleanて、複数の画像を反復処理します。

def clean_images(self):
    files = self.files.getlist('images')
    for file in files:
        if file:
            if file._size > 15*1024*1024:
                raise forms.ValidationError("Image file is too large ( > 15mb ).")
        else:
            raise forms.ValidationError("Could not read the uploaded file.")
    return files
于 2013-01-18T05:42:59.010 に答える