前提・実現したいこと
Djangoで以下の動作を行うアプリケーションを作成しています。
1つのformで2度submitを行います。
(1) FileFieldsからExcelファイルをアップロード・・・submit_1
(2) Excelファイルを読み込み、内容を確認(空欄の有無等)
⇒問題があれば(1)に戻る
⇒問題なければファイルの見出しリストを取得
(3) (1)のファイルと(2)で取得した見出しリストをDBに保存・・・submit_2
(1)~(2)の段階ではファイルのsaveは行わず、(3)のタイミングでsaveしたいのですが、(3)でsubmitするとFileFieldsが空になっており、DBに保存できません。
FileFieldsから入力したファイルを、POST後もFormに維持する方法はありませんでしょうか。
発生している問題・エラーメッセージ
(3)でsubmitするとFileFieldsが空になっており、「ファイルを選択してください」と出る。
該当のソースコード
model.py
class test_log(models.Model): file = models.FileField(upload_to="") header = models.CharField(max_length=100,default="0")
forms.py
class UploadForm(forms.ModelForm): class Meta: model = test_log fields = ('file', 'header')
views.py
def order(request): if request.method == "POST": df = pandas.read_excel(request.FILES['file']) header_col = df.columns.astype(str) header_arr = numpy.array(header_col) header = ','.join(header_arr) request.POST = request.POST.copy() request.POST['header'] = header uploadform = UploadForm(request.POST, request.FILES) else: uploadform = UploadForm() params={ "upload_form":uploadform, } return render(request, "order.html",params) def index(request): if request.method == "POST": uploadform = UploadForm(request.POST, request.FILES) if uploadform.is_valid(): new_contact = uploadform.save() return render(request, "index.html")
order.html
<form method="post" id="uploadform" enctype="multipart/form-data"> {% csrf_token %} <input type="hidden" name="mode" value="__order__"> <div> {{upload_form.file}} <button type="submit" formaction="{% url 'order' %}">アップロード</buttton> </div> <div> {{upload_form.header}} <button type="submit" formaction="{% url 'index' %}">保存</buttton> </div> </form>
試したこと
django-file-resubmit というモジュールを試してみたかったのですが、サンプルを見ても使い方がよくわかりませんでした。
https://github.com/un1t/django-file-resubmit
補足情報(FW/ツールのバージョンなど)
Python 3.7
Django 2.2.1
あなたの回答
tips
プレビュー