Сохранить файл FileField для загрузки в другое место, кроме MEDIA_ROOT? - PullRequest
5 голосов
/ 15 ноября 2009

Могу ли я использовать FileField для обработки файла, но сохранить его где-нибудь не в MEDIA_ROOT/MEDIA_URL, а где-то еще целиком.

Нужно убедиться, что оно не загружается; хотя отказ в разрешениях на чтение мог бы сработать, надеясь на что-то лучшее ... например, на другой каталог.

Ответы [ 2 ]

12 голосов
/ 15 ноября 2009

Есть несколько способов сделать это.

Сначала вы можете взглянуть на обработку загруженных файлов из документации Django. Если вы перечитаете его, в основном вы сможете обработать загрузку файла в вашем представлении в той же части, где вы обрабатываете форму.

Другой вариант, который, на мой взгляд, был бы лучше, - это использовать пользовательскую систему хранения файлов . Вы можете сделать это очень просто, используя существующий в качестве базы, но просто измените местоположение, а затем используйте его в качестве аргумента в вашем FileField. Например:

from django.core.files.storage import FileSystemStorage

my_store = FileSystemStorage(location='/some/other/dir')

class SomeModel(models.Model):
      file = models.FileField(storage=my_store)

Надеюсь, это поможет!

2 голосов
/ 15 ноября 2009

Учитывая, что единственное фактическое использование MEDIA_ROOT во всем Django - это определить, где хранятся загруженные файлы, кажется, что было бы более целесообразно просто указать MEDIA_ROOT там, где вы хотите загруженные файлы, а затем использовать другой параметр для путь к вашим статическим активам. Этот подход используется Pinax и django-staticfiles , которые используют настройки STATIC_URL и STATIC_ROOT.

Обратите внимание, что даже страница документации по обслуживанию статических ресурсов в разработке больше не рекомендует использовать MEDIA_ROOT для этой цели, она демонстрирует использование вашей собственной настройки STATIC_DOC_ROOT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...