Загрузка файла не работает в формах обновления 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'])
Вернуться на верх