如何使用South的DataMigration来更改Django模型ImageField实例的存储后端?

时间:2010-08-23 05:44:41

标签: django migration django-south imagefield django-storage

我正在尝试将一些模型ImageFields迁移到使用S3BotoStorage的{​​{1}}存储后端。作为此过程的一部分,我已将模型的ImageField声明更改为包含django-storages参数,并且将模型保存到ImageField属性的模型的新实例现在将按预期存储在S3中。

我试图将现有的模型实例移到S3中存储他们的数据,所以写了这样的South DataMigration:

storage=instance_of_s3botostorage

但这显然没有预期的效果,因为图像文件只是使用旧的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() 后端保存 - 这是有道理的,因为save()实际上是属于storage的方法FieldFile

那么,如何在模型实例上移动/更改文件存储?

2 个答案:

答案 0 :(得分:4)

因此,结果表明用于文件的特定存储空间不存储在数据库中。 “迁移”只是更改模型定义的问题,然后,在使用存储子系统API之外,只需将文件上传到新的存储位置。

答案 1 :(得分:0)

我会为你的问题看一个更像这样的系统。 http://github.com/seanbrant/django-queued-storage