#python #django #django-models #django-views #django-forms
#python #django #django-модели #django-просмотры #django-формы
Вопрос:
Я следую пути, показанному ниже, и все кажется нормальным. Но проблема в том, что я загружаю больше, чем файлы фотографий (удерживая ctrl
), но на самом деле загружается только один из них. Вот мои коды:
views.py
:
def school_document(request):
if request.method == 'POST':
form = CreateSchoolDocumentForm(request.POST, request.FILES, use_required_attribute=False)
if form.is_valid():
form.save()
return HttpResponseRedirect('school_document')
else:
form = CreateSchoolDocumentForm(use_required_attribute=False)
context = {
'form': form
}
return render(request, 'school_document.html', context)
forms.py
:
...
class Meta:
model = SchoolDocument
fields = '__all__'
widgets = {
'photos': ClearableFileInput(attrs={'multiple': True}),
}
school_document.html
:
<form class="form-container" method='POST' enctype="multipart/form-data" style="height: auto;">
...
</form>
models.py
:
class SchoolDocument(models.Model):
apply_date = models.DateTimeField(_('Müraciət tarixi'))
...
photos = models.FileField(upload_to='static/school_documents/', blank=True, null=True)
def __str__(self):
return str(self.apply_date)
Комментарии:
1. Пожалуйста, покажите свою модель
2. @ha-neul, добавлено.
Ответ №1:
Это обновленный ответ. У вас SchoolDocument
есть несколько полей плюс photo
поле. Когда вы устанавливаете свою модель таким образом, фотополе сможет принимать только один файл.
Что вам нужно сделать, так это создать отдельную Photo
модель и ForeignKey
для вашей SchoolDocument
модели.
class SchoolDocument(models.Model):
apply_date = models.DateTimeField(_('Müraciət tarixi'))
...
def __str__(self):
return str(self.apply_date)
class Photo(models.Model):
schooldocument = models.ForeignKey(SchoolDocument, ........)
image = models.FileField(upload_to='static/school_documents/', blank=True, null=True)
В вашем forms.py , вы добавите еще одно поле (filefield) в свою форму SchoolDocument с настройкой виджета «несколько файлов».
и в views.py , вы сохраните индивидуальный файл в вашей Photo
модели
files = request.FILES.getlist('image')
for f in files:
photo = Photo(schooldocument=schooldocument, image=f)
photo.save()
# Do something about each f
Комментарии:
1. Я нашел ответ, похожий на ваш, в документации Django, но не знаю, что это
# Do something about each f
значит. Что мне там делать, просто для сохранения их в базе данных?2. Запишите каждый отдельный файл в базу данных.
3. @MikeStoddart, можете ли вы объяснить это на примере кода? Я действительно не знаю, что делать.
4. Я не работал с загрузкой файлов со времен Django 1.x, поэтому моя память туманна. Но очень быстрый взгляд на документацию по загрузке файлов Django показывает:
instance = ModelWithFileField(file_field=f) instance.save()
5. Снова обновлено, что делать с файлами