LoginSignup
arya_
@arya_

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Django 画像アップロードでバリデーションがTrueにならない。

解決したいこと

画像アップロードでバリデーションがTrueにならない。
色々試して、正常に動作するパターンと動作しないパターンを探ってみましたが、全く理由がわかりません...

    if request.method == "POST":
        form = forms.ContactForm(request.POST, request.FILES)
        params["form"] = form
        file = request.FILES.get('image')
        if file:
            path = default_storage.save(f'{file.name}', ContentFile(file.read()))
            request.session['file_path'] = path
        if form.is_valid():
            return render(request, "home/confirm.html", params)

上記コードだとファイルアップロード時に「画像をアップロードしてください。アップロードしたファイルは画像でないか、または壊れています。」とエラーメッセージが表示されform.is_valid()がFalseになってしまう。

    if request.method == "POST":
        form = forms.ContactForm(request.POST, request.FILES)
        file = request.FILES.get('image')
        if file:
            path = default_storage.save(f'{file.name}', ContentFile(file.read()))
            request.session['file_path'] = path
        if form.is_valid():
            params["form"] = form
            return render(request, "home/confirm.html", params)

params["form"] = form の位置を変えたところ正常に動作

    if request.method == "POST":
        form = forms.ContactForm(request.POST, request.FILES)
        params["form"] = form
        print(form.errors)
        file = request.FILES.get('image')
        if file:
            path = default_storage.save(f'{file.name}', ContentFile(file.read()))
            request.session['file_path'] = path
        if form.is_valid():
            return render(request, "home/confirm.html", params)

また、params["form"] = formの下にprint(form.errors)やprint(form.is_valid())など追加すると正常に動作するが、print("WWW")みたいな文字列ではファイルをアップロードしてもform.is_valid()がFalseになる。

0

1Answer

default_storage.save(f'{file.name}', ContentFile(file.read()))
この行の削除でも正常にバリデーションされるようです。

0

Your answer might help someone💌