私は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>