Django сохранить файл на локальном хосте - PullRequest
0 голосов
/ 17 июня 2019

Я работаю над приложением Django (DRF), но я инженер JS, так что это все для меня в новинку.

У меня есть это в моем models.py, вне каких-либо реальных моделей:

storage = S3Storage(aws_s3_bucket_name=settings.DOCUMENTS_BUCKET)
upload_location = 'recordings/'

и это поле, в котором оно используется внутри одной из моделей:

zip_file = models.FileField(
    upload_to=upload_location, storage=storage, null=True)

Это работает нормально в производстве.Тем не менее, я хочу иметь возможность проверить его локально, добавить эти zip-файлы при локальной разработке.Поэтому я добавил это для storage и upload_location:

if settings.DEBUG:
  storage = FileSystemStorage(location='/')
  upload_location = ''

Затем, когда я пытаюсь сохранить файл от admin на localhost, я получаю следующую ошибку:

[Errno 13] Permission denied: '/my-file.zip'

Если я правильно понял, приложение не может просто создать это местоположение где-нибудь в моей файловой системе.Может я не прав.Как я могу решить это?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Местоположение, переданное в FileField, относится к MEDIA_ROOT, если оно не начинается с косой черты.Если он начинается с косой черты, это абсолютный путь относительно корня вашего диска.

Итак, location='/' означает корень вашего жесткого диска (отсюда проблемы с разрешениями).

Вы можете использовать ./, чтобы использовать MEDIA_ROOT, но обычно лучше группировать ваши активы на основе некоторых критериев.Например, для модели с именем SomeModel поместите активы куда-нибудь, например location='some-models/'.

1 голос
/ 17 июня 2019

Я бы порекомендовал вам взглянуть на django-хранилища .
Вы можете легко сохранять файлы на моделях, используя FileSystem для localhost и S3 для производства.
Все конфигурации будут включенынастройки, так что вам не нужно больше ставить IF.

...