Как создать представление шаблона с 3 формами, две из которых загружают несколько изображений?

Я сделал 3 формы в одном шаблоне, в первой модели поля являются текстовыми вводами (работает и сохраняет данные), во второй модели это ввод для загрузки нескольких изображений (не работает и не сохраняет данные) и в третьей также для загрузки нескольких изображений (не работает и не сохраняет данные)

При создании представления я разделил три формы на одно представление, но только первая сохраняет данные, остальные нет. Даже если я захожу в /admin, то там нет кнопки ввода для сохранения изображений. Это заставляет меня думать, что я делаю что-то не так с моими представлениями, но я не знаю, что именно. вы можете помочь мне просмотреть код? Спасибо

models.py

class Carro(models.Model):
   placas=models.CharField(max_length=255)
   tipo=models.CharField(max_length=255)
   cliente= models.ForeignKey(Clientes, on_delete=models.SET_NULL, null=True)
   fecha_registros = models.DateTimeField(default=datetime.now, null=True)

   def __str__(self):
       return f'{self.placas} {self.tipo}{self.cliente}' \
              f'{self.fecha_registros}'


class CarroImagenes(models.Model):
  carro = models.ForeignKey(Carro, on_delete=models.SET_NULL, null=True)
  fotosCarro=models.ImageField(null=True, blank=True, upload_to="images/")

  def __str__(self):
      return f'{self.fotosCarro}'

class GarantiaImagenes(models.Model):
   carro = models.ForeignKey(Carro, on_delete=models.SET_NULL, null=True)
   garantia=models.ImageField(null=True, blank=True, upload_to="images/")
   
   def __str__(self):
       return f'{self.garantia}'

forms.py

class CarroForm(forms.ModelForm):
   class Meta:
       model=Carro
       fields = ['placas','tipo','cliente']
       exclude = ['fecha_registros']
       widgets = {
           'placas': forms.TextInput(
               attrs={

                   'class': 'form-control',

               }
           ),
           
          
           'tipo': forms.TextInput(
               attrs={

                   'class': 'form-control'
               }
           ),

           
           'cliente': forms.Select(
               attrs={
                   'class': 'form-select'
               }
           ),
          
           'fecha_registros': forms.DateInput(
               attrs={
                   'class': 'form-control',
               }
           ),

       }


class CarroImagenesForm(forms.ModelForm):
   class Meta:
       model = CarroImagenes
       fields = ['fotosCarro']
       widgets = {
           'fotosCarro':forms.FileInput(
               attrs={
                   'class': 'type-file',
                   'multiple': True,
                   'id': 'file-input',
                   'onchange':'preview()',
               }
           )
       }


class GarantiaImagenesForm(forms.ModelForm):
   class Meta:
       model = GarantiaImagenes
       fields = ['garantia']
       widgets = {
           'garantia':forms.FileInput(
               attrs={
                   'class': 'type-file',
                   'multiple': True,
                   'id': 'file-inputz',
                   'onchange': 'previewz()',
                 
               }
           ),
       }


views.py

def create_carros(request):

   carroform = CarroForm(request.POST or None)
   carroimagenesform = CarroImagenesForm(request.POST or None)
   garantiaimagenesform = GarantiaImagenesForm(request.POST or None)

   if request.method == 'POST' and 'carros' in request.POST:
       form = CarroForm(request.POST or None)
       if form.is_valid():
           form.save()


   if request.method == 'POST' and 'fotosCarro' in request.POST:
       carroimagenesform = request.FILES.getlist('fotosCarro')
       if form.is_valid():
           for f in carroimagenesform:
               images=CarroImagenes(fotosCarro=f)
               images.save()


   if request.method == 'POST' and 'garantia' in request.POST:
       garantiaimagenesform = request.FILES.getlist('garantia')
       if garantiaimagenesform.is_valid():
           for g in garantiaimagenesform:
               imagez=GarantiaImagenes(garantia=g)
               imagez.save()


   else:
       form = CarroForm()

   return render(request, 'carros/carros-form-add.html', {
       'form': form,
       'carroimagenesform': carroimagenesform,
       'garantiaimagenesform':garantiaimagenesform
   })

add.html

Вернуться на верх