我在 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')
但我也需要其他人。在搞砸了一天多之后,我决定强行使用它并将参数添加到表单的动作属性中,例如:
$('#upload').attr('action', "?pixel_size="+$('#pixel_size').val());
这可行,但这产生了一个不同的问题:我希望表单转到某个视图。在我原来的形式中,我有这个:
<form id="upload" method="POST" enctype="multipart/form-data"
action="/report/CDSEM/DR4iBeta/dr4iupload/">
我添加了一个 onsubmit 函数,这样我就可以将我的参数添加到 action 属性中,但这似乎使它忽略了表单操作。我发现它并没有走上面的观点,而是去/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>