一部のモデルの ImageFields を からS3BotoStorage
ストレージ バックエンドを使用するように移行しようとしていdjango-storages
ます。このプロセスの一環として、モデルの ImageField 宣言をstorage=instance_of_s3botostorage
引数を含むように変更し、イメージを ImageField 属性に保存するモデルの新しいインスタンスが、意図したとおりに S3 に保存されるようになりました。
私は既存のモデル インスタンスを S3 にデータを保存するように移動しようとしたので、South DataMigration を次のように記述しました。
def forwards(self, orm):
"upload ImageField file to S3 if it's not already in there"
for mymodel in orm.MyModel.objects.all():
if mymodel.logo_image and not isinstance(mymodel.logo_image.storage, S3BotoStorage):
print "uploading %s to S3" % mymodel.logo_image
file_contents = ContentFile(mymodel.logo_image.read())
mymodel.logo_image.save(mymodel.logo_image.name, file_contents)
mymodel.save()
storage
しかし、画像ファイルは単に古いバックエンドを使用して保存されるため、これは明らかに意図した効果をもたらしませんFieldFile
。FileField
では、モデルのインスタンスでファイル ストレージを移動/変更する方法は?