0

私はdjangoにフォームを持っています:

class UploadForm(forms.Form):
    klarf_files = forms.FileField(label='Select a file')
    pixel_size = forms.CharField()
    fov = forms.CharField()
    template_recipe = forms.CharField()
    template_target = forms.CharField()

フォームを投稿すると、klarf_files フィールドのみが取得され、他のフィールドは取得されません。ドキュメントにあるように、フォームにはcleaned_dataディクショナリがありませんが、これを行うことでファイルを取得できます。

form = UploadForm(request.POST, request.FILES)
files = request.FILES.getlist('klarf_files')

しかし、私は他の人も必要です。1日以上これをいじった後、力ずくでフォームのアクション属性にパラメーターを追加することにしました。

$('#upload').attr('action', "?pixel_size="+$('#pixel_size').val());

これは機能しますが、別の問題が発生しました。フォームを特定のビューに移動させたいのです。私の元の形式では、これがありました:

<form id="upload" method="POST" enctype="multipart/form-data"
  action="/report/CDSEM/DR4iBeta/dr4iupload/">

アクション属性にパラメーターを追加できるように onsubmit 関数を追加しましたが、フォーム アクションを無視するようです。上記のビューではなく、/report/CDSEM/DR4iBeta/ に移動していることがわかりました。それで、onsubmit関数でリダイレクトしようとしましたが、それがGETになり、ファイルが失われました。

フォームのcleaned_dataディクショナリを取得できない理由を知りたい、またはパラメーターを追加してPOSTのままにし、必要な場所に移動する方法を知りたい.

ここに私のテンプレートがあります:

  <form id="upload" method="POST" enctype="multipart/form-data"
  action="{% url motor.core.reports.views.upload the_controller.app.name the_controller.get_name %}">
  {% csrf_token %}
  <label for="id_pixel_size">Pixel Size</label><br />
  <input type="text" value="{{ pixel_size_default }}" id="id_pixel_size" name="pixel_size">
  <label for="id_fov">FOV</label><br />
  <input value="{{ fov_default }}" id="id_fov" name="fov">
  <label for="id_template_recipe">Template Recipe</label><br />
  <input value="{{ template_recipe_default }}" id="id_template_recipe" name="template_recipe">
  <label for="id_template_target">Template Target</label><br />
  <input value="{{ template_target_default }}" id="id_template_target" name="template_target">
  <input type="file" name="klarf_files" id="klarf_files" multiple=""/>
  <input type="submit" class="submit" value="Upload"/>
  </form>
4

1 に答える 1