#python #django #forms #file
#python #django #формы #файл
Вопрос:
Итак, я работаю над сайтом портфолио, и у меня есть форма под названием Work, которая представляет работы в портфолио. В работе есть поле M2M для обычных изображений и одно поле ImageField для основного изображения, которое будет использоваться для эскизов и т. Д.
Моя проблема заключается в следующем: когда я перехожу к представлению обновления, которое я создал для работы, старое изображение (которое уже есть в базе данных) отображается в форме, но отсутствует в самом поле. В нем указано current: [имя изображения], а затем обычное поле filefield с меткой edit
.
Я не хочу, чтобы пользователь мог обновлять работу только в том случае, если они снова загружают изображение. Как мне передать текущее изображение в форму?
#models.py
class Work(models.Model):
name = models.CharField(max_length=255)
image = models.ImageField( upload_to="images" )
#forms.py
class Meta:
model = Work
exclude = ('slug',)
#views.py
def workEdit(request, pk):
if request.method == "POST":
form = WorkForm(request.POST, request.FILES)
if form.is_valid():
new_work = form.save(commit=True)
return redirect("/portfolio/beheer/werk")
else:
print(form)
print(form.errors)
else:
work = get_object_or_404(Work, pk=pk)
form = WorkForm(request.POST ,request.FILES, instance=work)
context = {
'form': form,
}
return render(request, 'submit.html', context)
Комментарии:
1. Это в форме, и ее не нужно загружать снова. Это уже то, что вы хотите. (Браузеры не позволяют вам предварительно заполнять поле загрузки файла по соображениям безопасности.)
2. Если я нажму «обновить» (созданную мной кнопку), я потеряю предыдущее изображение, если я не загрузил новое. Как это можно решить?
3. Ну, в том виде, в котором у вас есть код сейчас, все будет воссоздано при сохранении — потому что вы не передаете
instance
атрибут при создании экземпляра формы в POST.4. Это полностью исправило проблему, переместило get_or_404 в первую строку представления функции. Большое спасибо.