Файл не в request.FILES, а в request.POST Я использую htmx, чтобы сделать запрос post
У меня есть фрагменты входов, которые я вывожу на html страницу при выполнении условия, все работает должным образом, кроме входа с типом файл, я хочу загрузить файлы, когда произошло изменение, но объект файла находится не в request.FILES, а в request.POST, я не против, чтобы это был request.POST, но файлы отображаются как 'multiple': ['[object File]']
Мой частичный шаблон
<div class="my-2">
<div id="uploaded"></div>
<p class="lead">{{question.prompt}}</p>
<input name="multiple" type="file" accept="image/*, .pdf" id="image_{{question.id}}"
{% if question.required %}required{% endif %} {% if question.disabled %}disabled{% endif %} class="form-control"
placeholder="{{question.placeholder}}" hx-post="{% url 'survey:file_multiple' %}" hx-trigger="change">
<input type="hidden" name="filemultipleId"
value="{% if question.form_input_type == 'file-multiple' %}{{question.id}}{% endif %}">
</div>
Я не буду создавать форму с помощью django form, так как будет сложно и почти невозможно достичь динамичности, которую я ищу
request.POST QueryDict
<QueryDict: {'csrfmiddlewaretoken': ['TiLZFEWw88cqItD8MABv6lZKYDrNaVxGF4ZMDOV3sK43540z6uOcrx5uQO6iYldA', 'date': [''], 'dateId': ['20', '5'], 'multiple': ['[object File]'], 'filemultipleId': ['18'], 'fileId': ['17']}>
Traceback
Internal Server Error: /file-multiple/
Traceback (most recent call last):
File "/home/tomms/.local/share/virtualenvs/web-app-QB9eq0sY/lib/python3.9/site-packages/django/utils/datastructures.py", line 83, in __getitem__
list_ = super().__getitem__(key)
KeyError: 'multiple'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/tomms/.local/share/virtualenvs/web-app-QB9eq0sY/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/tomms/.local/share/virtualenvs/web-app-QB9eq0sY/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/tomms/.local/share/virtualenvs/web-app-QB9eq0sY/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/tomms/Work/web-app/survey/inputs.py", line 238, in file_multiple
print(request.FILES['multiple'])
File "/home/tomms/.local/share/virtualenvs/web-app-QB9eq0sY/lib/python3.9/site-packages/django/utils/datastructures.py", line 85, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'multiple'
Вы добавили/установили hx-encoding
в multipart/form-data
?
Согласно документации https://htmx.org/docs/#files
Если вы хотите загрузить файлы через htmx-запрос, вы можете установить атрибут hx-encoding в multipart/form-data. При этом для отправки запроса будет использоваться объект FormData, который правильно включит файл в запрос.
.