0

私はこれに似たようなことをしようとしています:

Django:複数のファイルのアップロードを許可するフィールドのクリーンなメソッドを作成する方法は?

ユーザーは、次を使用して 1 つ以上のファイルをアップロードできます。

<input type="file" name="images" multiple="multiple">

受け入れられた回答で提供されたコードを使用すると...

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

...そして do 、アップロードされたファイルのいずれかに問題がある場合form.is_valid()は返されます。False

私がやりたいことは、どのファイルがクリーンでどのファイルがそうでないかを判断し、有効なファイルを処理し、無効なファイルが無効である理由をユーザーに伝えることです。

では、ファイルごとに clean メソッドを適用することは可能ですか?つまり、getlistclean メソッドからループを引き出し、代わりにループ内から clean メソッドを実行することは可能ですか?

4

1 に答える 1

1

私の 2 セント: これについては、フォーム検証フレームワークをバイパスする必要があります。フォーム フィールド名へのエラーの添付は、フレームワークに大きく組み込まれています。

代わりに、カスタム エラーをフォーム オブジェクトの属性またはメソッドに格納してみませんか?

{% if form.images.errors %}
    {% for image, error in form.more_detailed_images_errors %}
       Your image {{ image }} has an error: {{ error }}
    {% endfor %%
{% endif %}

class MyForm(...):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.more_detailed_image_errors = []

    def clean_images(self):
        #...
        for image in images:
            # validate image
            if image_is_invalid:
                error_msg = 'This image is invalid for reason X'
                # presumably this is your dynamic error message
                self.more_detailed_image_errors.append((image, error_msg))
        if self.more_detailed_image_errors:
            raise ValidationError("You've uploaded invalid images")
于 2013-06-13T20:44:58.860 に答える