Django - не удается корректно загрузить файлы/изображения
Я создаю приложение Django (запускаемое локально) и у меня головная боль по поводу загрузки файлов/картинок. Я прочитал тонны вопросов/ответов везде, а также следовал официальной документации, но почему-то у меня все еще проблемы.
В файле models.py у меня есть следующее:
class Documents(models.Model):
hkid = models.ImageField("HKID", upload_to='images/', null=False)
Соответствующее представление в views.py:
class ApplicationUploadView(LoginRequiredMixin, CreateView):
model = Documents
template_name = "home/application.html"
fields = '__all__'
success_url = reverse_lazy('completion')
def form_valid(self, form):
print("form is valid")
//other stuff..
return super().form_valid(form)
В settings.py я добавил (как объяснено в документации):
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
И наконец, я добавил это в конец моего urls.py:
urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
Когда я запускаю приложение, все работает нормально - я загружаю картинку в форму, и надпись "форма действительна" также выводится на экран. Однако в папку media/ или media/images картинка не загружается вообще.
Однако, если я удалю две строки MEDIA_ROOT и MEDIA_URL в settings.py и удалю строку "urlpatterns +=" в urls.py, картинка будет загружена правильно, но в папке 'images' (не внутри media, однако). Однако, если я попытаюсь открыть картинку из панели администратора, где есть ссылка: http://127.0.0.1:8000/images/hk-id-card-sample.jpg. она выдает сообщение, что ее не существует (но я вижу, что картинка правильно расположена по адресу /images/hk-id-card-sample.jpg).
Пожалуйста, помогите мне понять:
- Why the picture is not uploaded if I add /media/?
- Why I cannot access the picture from the admin panel, even though the link to the file is correct?
Спасибо!
Убедитесь, что ваш тег <form> имеет атрибут enctype="multipart/form-data"
<form method="post" enctype="multipart/form-data">
{{your_form_ctx}}
</form>