Django uygulamasında oluşturulan dosyalar için FileSystemStorage
kullanıyorum. Böyle başlatılamıyor: iyi çalışırAyarlara bağlı olarak Django geçişleri ve FileSystemStorage
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(''))
:
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/'))
kullandığım yeni bir dosya oluşturmak istediğinizde. Tek sorun, FileSystemStorage
'un yolunun Django geçişinde "kodlanmış" olmasıdır. Geliştirme için farklı ayarlar kullandığım için (ki bu da değişir) ve üretim, genellikle manage.py makemigrations
komutu yalnızca yol değiştiğinden, her şey veri tabanında aynı kalmasına rağmen bir geçiş oluşturur.
FileSystemStorage
'un bir alt sınıfını kullanarak bir çözüm olduğunu biliyorum (aşağıdaki cevaba bakın), ancak daha iyi bir çözüm var mı?
import os
from urlparse import urljoin
from django.conf import settings
from django.core.files.storage import FileSystemStorage
from django.utils.deconstruct import deconstructible
@deconstructible
class MyFileSystemStorage(FileSystemStorage):
def __init__(self, subdir):
self.subdir = subdir
super(MyFileSystemStorage, self).__init__(location=os.path.join(settings.MEDIA_ROOT, self.subdir), base_url=urljoin(settings.MEDIA_URL, self.subdir))
def __eq__(self, other):
return self.subdir == other.subdir
Sonra böyle depolama başlatabilir:
Sanırım şunun gibi: https://docs.djangoproject.com/en/1.9/howto/custom-file-storage/, https://code.djangoproject.com/ticket/22337 – Daviddd
İşte başka bir seçenek : https://github.com/translate/pootle/commit/8ff2463f0b1f1771595334df9ff9f7ba4ec33ae5#diff-0073684248aab77bd945bf6209970a09R34 – jaywink