При попытке загрузить изображение из формы, возникает ошибка: {«errors»: [{«img»: [«This field is required.»]}]}
Ходя я добавляю файл в форму через кнопку загрузить и он там отображается. Но при нажатии кнопки «submit» выходит страница с ошибкой ,что форма должна быть обязательно заполнена.
models.py
class Picture(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
img = models.ImageField(upload_to = 'uploads')
name_image = models.CharField(max_length=30, verbose_name='Название изображения', blank=True, null=True)
upload_time = models.DateTimeField(
verbose_name='Время загрузки', blank=True, null=True)
views.py
class UploadImage(TemplateView):
template_name = 'resize_image/upload_image.html'
success_url = reverse_lazy('image_list')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['upload_pic_form'] = UploadPictureForm(
self.request.POST, self.request.FILES )
return context
def post(self, request, *args, **kwargs):
context = self.get_context_data()
if context['upload_pic_form'].is_valid():
pic = context['upload_pic_form'].save(commit=False)
pic.save()
return redirect('image_list')
return JsonResponse({'errors': [context['upload_pic_form'].errors]})
urls.py
urlpatterns = [
path('', views.image_list, name='image_list'),
path('upload/', views.UploadImage.as_view(), name='upload_image'),
]
HTML страница с формой:
{% extends 'resize_image/base.html' %}
{% load staticfiles %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
<div class="form-group">
<label>файл</label>
{{ upload_pic_form.img }}
</div>
<div class="form-group">
<label>Название</label>
{{ upload_pic_form.name_image }}
</div>
<input type="submit" value="Submit" />
</form>
{% endblock %}
Мне ,кажется, что get context у меня лишний в этой форме. Подозреваю ,что ошибка во views.py, но где именно не пойму.
-- Подскажите, пожалуйста ,как правильно реализовать загрузку изображения, чтоб не возникало ошибок.
-- И как можно реализовать одновременно два варианта загрузки - и из стандартной формы выбора файла и из строки url.