Как сохранить NamedTe TemperFile в файл модели FileField в Django? - PullRequest
4 голосов
/ 18 декабря 2008

Я создал NamedTeoraryFile, добавил в него некоторый контент, и теперь я хочу сохранить его в модели FileField.

Проблема в том, что я получаю SuspiciousOperation, потому что каталог tmp не находится в каталоге FileSystemStorage.

Как правильно это сделать?

Ответы [ 2 ]

4 голосов
/ 19 декабря 2008

Вы хотите, чтобы django проверил его для вас, потому что он гарантирует, что файл помещается в каталог MEDIA_ROOT, чтобы он был доступен для загрузки.

В любом случае, если вы хотите поместить файлы вне MEDIA_ROOT (в данном случае '/ tmp'), вы должны сделать что-то вроде этого:

from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='/tmp')

class YourModel(models.Model):
    ...
    file_field = models.FileField(..., storage=fs)

см. Документация Django

1 голос
/ 19 декабря 2008

В итоге я сделал противоположный способ, который Ромке объясняет: я создаю временный файл в MEDIA_ROOT.

Другим решением может быть работа с файлом в / tmp, а затем перемещение его в MEDIA_ROOT.

Моя первоначальная путаница связана с тем, как формы работают с загруженными файлами: они находятся в каталоге / tmp (или в памяти) и затем автоматически перемещаются в каталог upload_to. Я искал общий способ сделать это в Джанго.

...