Файл загружается, но в API отображается неверный URL - PullRequest
0 голосов
/ 19 апреля 2019

Рабочая часть выглядит следующим образом:

file = models.FileField(upload_to=upload_file)

Метод определяется как:

def upload_file(instance, filename):
   return '{user}/{filename}'.format(user=instance.user, filename=filename)

В settings.py У меня установлены следующие пути:

STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
MEDIA_URL = '/media/'
(...)
# For reference:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

После загрузки файла через интерфейс администратора появляется сообщение об успешном завершении, и файл появляется в папке static/media/admin/<file>.Каталог static находится в BASE_DIR, на том же уровне, что и db.sqlite3, упомянутый в приведенной выше выдержке.

Однако при отображении местоположения изображения в API я получаю что-то вроде:

"file": "http://127.0.0.1:8000/media/uploads/admin/<file>"

Как вы ясно видите, каталог static пропущен, и после нажатия на ссылку я получаю 404.

Что нужно исправить, чтобы он работал в Django 2.2?

1 Ответ

0 голосов
/ 23 апреля 2019

Решением было добавить следующий код в файл urls.py приложения:

from django.conf import settings
from django.conf.urls.static import static

А затем добавить эту строку в массив urlpatterns:

urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
...