'When I upload and save multiple files nothing happens

I have a doubt, it is that reviewing the documentation to upload multiple files, I see that the site explain it easily, only that it is not working for me.

In the same template I have a form that accepts text and also there are two inputs that each must accept multiple images

So I don't understand when I click the save button, none of my images are saved but the other data is saved

models.py

class Carro(models.Model):
    no_politica=models.CharField(max_length=255, null=True)
    cliente= models.ForeignKey(Clientes, on_delete=models.SET_NULL, null=True)
    fotosCarro=models.ImageField(null=True, upload_to="images/")
    garantia=models.ImageField(null=True, upload_to="images/")
    fecha_registros = models.DateTimeField(default=datetime.now, null=True)

    def __str__(self):
        return f'{self.no_politica}{self.cliente}' \
               f'{self.fecha_registros}{self.fotosCarro}{self.garantia}'

carros-form-add.html

                                        <form enctype="multipart/form-data" method="post">
                                                {% csrf_token %}
                                               <div class="row mb-3">
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label>License plate</label>
                                                        <br>
                                                        <div>
                                                          {{ form.placas }}
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label>Type</label>
                                                        {{ form.tipo }}
                                                    </div>
                                                </div>
                                                <div class="col-md-4 only-person">
                                                    <div class="mb-3">
                                                        <label>Make</label>
                                                        {{ form.marca }}
                                                    </div>
                                                </div>
                                            </div>
                                            <div class="row mb-3">
                                                <div class="col-md-4 only-person">
                                                    <div class="mb-3">
                                                        <label>Model</label>
                                                        {{ form.modelo }}
                                                        <div class="invalid-feedback">
                                                            Please provide the first name.
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-md-4 only-person">
                                                    <div class="mb-3">
                                                        <label class="form-label">Year</label>
                                                        {{ form.año }}
                                                        <div class="invalid-feedback">
                                                            Please provide the last name.
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label class="form-label">VIN</label>
                                                        {{ form.vin }}
                                                        <div class="invalid-feedback">
                                                            Please provide a phone number.
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>

                                            <div class="row mb-3">

                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label class="form-label">Color</label>
                                                        {{ form.color }}
                                                        <div class="invalid-feedback">
                                                            Please provide a fax number.
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label class="form-label">Engine</label>
                                                        {{ form.motor }}
                                                        <div class="invalid-feedback">
                                                            Please provide a fax number.
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>

                                            <div class="row mb-3">
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label class="form-label">Insurance agent</label>
                                                        {{ form.agente_seguros }}
                                                        <div class="invalid-feedback">
                                                            Please provide an e-mail.
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label class="form-label">Insurance company</label>
                                                        {{ form.compañia_seguros }}
                                                        <div class="invalid-feedback">
                                                            Please provide a website.
                                                        </div>
                                                    </div>
                                                </div>
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label>Policy No.</label>
                                                        {{ form.no_politica }}
                                                    </div>
                                                </div>
                                            </div>

                                            <div class="row mb-3">
                                                <div class="col-md-4">
                                                    <div class="mb-3">
                                                        <label>Cliente</label>
                                                        {{ form.cliente }}
                                                    </div>
                                                </div>
                                            </div>

                                            </div>

                                            <!-- GALLERY CONTENT -->

                                            <div class="tab-pane" id="pictures" role="tabpanel">
                                                <div>
                                                    <input type="file" multiple name="fotosCarro">
                                                    <label for="file-input" class="btn btn-outline-success">Upload images</label>
                                                        <p id="num-of-files">No files chosen</p>
                                                        <div id="images"></div>

                                                </div>

                                            </div>

                                            <!-- Warranty CONTENT -->
                                            <div class="tab-pane" id="warranty" role="tabpanel">
                                                <div>
                                                    <input type="file" multiple name="garantia">
                                                    <label for="file-inputz" class="btn btn-outline-success">Upload images</label>
                                                        <p id="num-of-filez">No files chosen</p>
                                                        <div id="imagez"></div>

                                                </div>

                                                <br>
                                                <button class="btn btn-primary mb-3" type="submit" value="Post">Save</button>
                                            </div>

                                        </form>

views.py

class create_carros(FormView):

    form_class=CarroForm
    template_name='carros/carros-form-add.html'
    success_url=reverse_lazy('carros:list_cars')

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        files = request.FILES.getlist('fotosCarro')
        garantia = request.FILES.getlist('garantia')
        if form.is_valid():
            for f in files:
                fotos = CarroImagenes.objects.create(fotosCarro=f)
                fotos.save()
            for g in garantia:
                garantias = GarantiaImagenes.objects.create(garantia=g)
                garantias.save()
            form.save()
            return render(request, 'carros/index.html', {'form':form})

        else:
            return render(request,'carros:list_cars',{'form':form})



Solution 1:[1]

In order to save images via a form, you need to specify the enctype="multipart/form-data" parameter like this:

<form action="" method="POST" enctype="multipart/form-data">

{{ your_form_contents }}

</form>

https://docs.djangoproject.com/en/4.0/topics/http/file-uploads/

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Basley