Когда я сохраняю данные и загружаю несколько файлов, ничего не происходит
У меня есть сомнение, оно заключается в том, что просматривая документацию по загрузке нескольких файлов, я вижу, что они объясняют это легко, только это не работает для меня. Особенно я не знаю, что делать здесь, на мой взгляд:
for f in files:
Я поместил поля моей модели и в аргументы функции, но получаю много ошибок.
Поэтому я не очень хорошо понимаю эту строку кода, я не знаю, может поэтому моя форма не работает. И дело в том, что моя форма принимает данные, а также имеет две кнопки для загрузки нескольких изображенийМожете ли вы помочь мне решить эту проблему? Спасибо
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
<div class="row mb-3">
<div class="col-md-4">
<div class="mb-3">
<label>Cliente</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>
{{ form.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>
{{ form.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>
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:
# photo=Carro.objects.create()
return self.form_valid(form)
else:
return self.form_invalid(form)
forms.py
'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()',
}
),
Для сохранения изображений через форму необходимо указать параметр enctype="multipart/form-data" следующим образом:
<form action="" method="POST" enctype="multipart/form-data">
{{ your_form_contents }}
</form>
https://docs.djangoproject.com/en/4.0/topics/http/file-uploads/