In meiner Django App verwende ich eine FileSystemStorage
für generierte Dateien. Ich initialisieren es wie folgt aus:Django Migrationen und FileSystemStorage in Abhängigkeit von den Einstellungen
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/'))
Wenn ich eine neue Datei erstellt werden soll ich verwenden:
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(''))
Das funktioniert gut. Das einzige Problem ist, dass der Pfad FileSystemStorage
in der Django-Migration "fest codiert" ist. Da ich verschiedene Einstellungen für die Entwicklung (was ändert) und die Produktion verwendet, generiert der Befehl manage.py makemigrations
oft nur dann eine Migration, weil sich der Pfad geändert hat, obwohl in der Datenbank alles gleich bleibt.
Ich weiß, es gibt eine Lösung mit einer Unterklasse von FileSystemStorage
(siehe meine Antwort unten), aber gibt es eine bessere Lösung?
Ich nehme an, es ist so: https://docs.djangoproject.com/en/1.9/howto/custom-file-storage/, https://code.djangoproject.com/ticket/2237 – Daviddd
Hier ist eine andere Option : https://github.com/translate/pootle/commit/8ff2463f0b1f1771595334df9ff9f7ba4ec33ae5#diff-0073684248aab77bd945bf6209970a09R34 – jaywink