Я пытаюсь перенести некоторые модели 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
, что имеет смысл, учитывая, что save() на самом деле является методом FieldFile
, принадлежащим FileField
Итак, как переместить/изменить хранилище файлов на экземпляре модели?