Загрузка файла не работает в формах обновления django, но работает в формах создания
Я использую форму для создания и обновления формы. Шаблон и форма одинаковые, но вид разный. Проблема в том, что загрузка изображения работает в создании, но не в обновлении. Ни один файл не будет применен, а в методе post я получаю следующее:
/media/<filename>
похоже, что путь upload_to не применяется и файл не загружается. вот модель:
image = models.ImageField(upload_to='%Y/%m/%d', null=True, blank=True)
и вот форма:
image = forms.ImageField(label='Image', required=False, allow_empty_file=True)
и вот шаблон:
<form enctype="multipart/form-data" action="{% if edit == True %}{% url 'update' device_type serial_number %}{% else %}{% url 'addItem' %}{% endif %}" method="POST">
{% csrf_token %}
<div style="padding-right: 20px; padding-left: 20px">
{{ form.image.label }}:
{{ form.image }}
</div>
<button type="submit" class="btn">submit</button>
</form>
вышеуказанные коды являются упрощенными. кто-нибудь знает, почему это происходит.
Похоже, что в вашей форме вы не сохраняете данные, после условного оператора if form.is_valid. С тем, что вы сделали после того, как форма действительна, функция не знает, что делать с данными, поэтому вместо этого вы должны сохранить данные, когда форма действительна. Чтобы упростить ситуацию, я просто выберу часть вашего кода, которая обрабатывает логику сохранения действительных данных.
if request.method == "POST":
form = UpdateDeviceForm(request.POST, request.FILES)
print(form.errors)
if form.is_valid():
# Valid form data to be save
form.save() # here is where you save the data
name = form.cleaned_data['name']
serial_number = form.cleaned_data['serialNumber']
image = form.cleaned_data['image']
if not bool(image):
image = device.image
dt = int(form.cleaned_data['type'])