Как загрузить несколько изображений в форму, разделенную на 3 вкладки?
У меня есть форма, разделенная на 3 вкладки, на вкладке 2 и на вкладке 3 нужно загрузить несколько изображений соответственно. Информация, которую я нашел об этом, по большей части мне непонятна, а та, которую я легко увидел, выдает много ошибок, не могли бы вы мне помочь, подсказать, что я делаю не так? Спасибо
models.py
class Carro(models.Model):
placas=models.CharField(max_length=255)
marca=models.CharField(max_length=255)
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.placas} {self.marca}{self.cliente}{self.fotosCarro}{self.garantia}' \
f'{self.fecha_registros}'
forms.py
class CarroForm(forms.ModelForm):
class Meta:
model=Carro
fields = ['placas','marca','cliente','fotosCarro','garantia']
exclude = ['fecha_registros']
widgets = {
'placas': forms.TextInput(
attrs={
'class': 'form-control',
}
),
'marca': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'cliente': forms.Select(
attrs={
'class': 'form-select'
}
),
'fotosCarro':forms.FileInput(
attrs={
'class': 'type-file',
'multiple': True,
'id': 'file-input',
'onchange':'preview()',
}
),
'garantia':forms.FileInput(
attrs={
'class': 'type-file',
'multiple': True,
'id': 'file-inputz',
'onchange': 'previewz()',
# 'id':'pro-images',
# 'click': "$('#pro-images').click()",
}
),
'fecha_registros': forms.DateInput(
attrs={
'class': 'form-control',
}
),
}
views.py
def create_carros(request):
form = CarroForm(request.POST or request.FILES)
if request.method == 'POST':
form = CarroForm(request.POST or request.FILES)
fotosCarro = request.FILES.getlist('fotosCarro')
garantia = request.FILES.getlist('garantia')
for img in fotosCarro:
Carro.objects.create(fotosCarro=fotosCarro)
Carro.objects.create(garantia=garantia)
images=Carro.objects.all()
if form.is_valid():
form.save()
return redirect('carros/index.html')
return render(request, "carros/carros-form-add.html", {'form': form})
Change
Carro.objects.create(images=image)
to
Carro.objects.create(fotosCarro=image)
Аргумент ключевого слова должен соответствовать полю, которое вы определили в классе Carro.
Обратите внимание, что это исправит немедленную ошибку, но, вероятно, все равно не сделает то, что вы хотите. Кроме того, вы делаете здесь слишком много. Я советую вам почитать больше о формах. Если вы правильно используете формы, вы можете сократить код представления до следующего:
def create_carros(request):
form = CarroForm(request.POST or request.FILES)
if request.method == "POST":
if form.is_valid():
form.save()
Вам также нужно будет добавить обработку ошибок, когда форма недействительна, и отобразить форму с сообщениями об ошибках.