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).

Пожалуйста, помогите мне понять:

  1. Why the picture is not uploaded if I add /media/?
  2. 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> 
Вернуться на верх