В моем приложении Django я использую FileSystemStorage
для сгенерированных файлов. Я инициализирую его следующим образом:
import os
from urlparse import urljoin
from django.conf import settings
from django.core.files.storage import FileSystemStorage
gen_files_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'generated/'), base_url=urljoin(settings.MEDIA_URL, 'generated/'))
Когда я хочу создать новый файл, я использую:
from django.core.files.base import ContentFile
from django.db import models
def next_number():
# num = ...
return num
gen_file = models.FileField(storage=gen_files_storage)
gen_file.save('file%s.txt' % next_number(), ContentFile(''))
Это прекрасно работает. Единственная проблема заключается в том, что путь FileSystemStorage
"жестко закодирован" в миграции Django. Поскольку я использую разные настройки для разработки (изменения) и производства, часто команда manage.py makemigrations
генерирует перенос только потому, что путь изменился, хотя все остается в базе данных одинаковым.
Я знаю, что есть решение, использующее подкласс FileSystemStorage
(см. мой ответ ниже), но есть ли лучшее решение?