我现在已经尝试了几个小时使用South进行最愚蠢的迁移,但不知何故,我一直失败得很痛苦。我正在尝试迁移到Sorl-缩略图。
下面是我的过渡模型:
class Deal(models.Model):
image = ImageWithThumbsField(upload_to='deal_images',null=True,blank=True,sizes=(200,150),))
new_image = ImageField(upload_to='new_deal_images',default='deal_images/thumb_deal_noimg.gif')我的下一步迁移到目前为止是这样的:
def forwards(self, orm):
for deal in orm.Deal.objects.all():
try:
image_name = deal.image.name.split('/')[1]
file_ = File(deal.image.open()) # I've also tried the method read()
deal.new_image.save('new_deal_images/'+image_name,file_,save=False)
except:
deal.new_image = None # For the default image kick in
deal.save()这是此代码的最新版本。所有其他的,大多数都无法正确地将图像文件放到新目录中。
救命..。:)
时光流逝..。
好吧..。经过几次测试,我得到了以下代码:
def forwards(self, orm):
for deal in orm.Deal.objects.all():
file_content = ContentFile(deal.image.read())
deal.new_image.save(deal.image.name,file_content) *
deal.save()图像被复制并保存在新的列(new_image)中,但问题是所有文件都保存在MEDIA_ROOT根目录中,而不是保存在所需的子目录('new_deal_images')中。我在*行中尝试了一下,但仍然没有成功:
deal.new_image.save('new_ideal_images/'+deal.image.name,file_content)窗台不能工作。
请帮帮我。:)
随着时间的推移..。
好的..。我认为南方存在一些严重的问题:
这段代码在Django Shell中运行良好,将所有文件复制到正确的位置:
15 for deal in Deal.objects.all():
16 image_path = deal.image.path·
17 file_ = File(open(image_path,'rb'))
18 deal.new_image.save(deal.image.name,file_)
19 deal.save()但迁移文件中的此代码不会转储MEDIA_ROOT根目录中的所有文件,而不会将其移动到正确的子目录中:
15 for deal in orm.Deal.objects.all():
16 image_path = deal.image.path·
17 file_ = File(open(image_path,'rb'))
18 deal.new_image.save(deal.image.name,file_)
19 deal.save()发布于 2011-11-30 08:00:44
您可以在South orm中重写字段的generate_filename方法。例如,这会将“image”字段中的所有图像复制到“new_image”字段中,只需更改存储它们的目录即可。
for deal in orm.Deal.objects.all():
deal._meta.get_field('new_image').generate_filename = \
lambda inst, fn: os.path.join('new_deal_images', fn)
img_data = SimpleUploadedfile(deal.image.name, deal.image.read())
deal.image.close()
setattr(deal, 'new_image', img_data)
deal.save()发布于 2011-11-01 09:38:32
我遇到了同样的问题,并通过直接分配路径而不是文件来解决它:
for tagged in orm.ImageTag.objects.all():
with tagged.image.content:
filename = tagged.image.content.name.split('/')[1]
path = default_storage.save('taggedImages/' + filename, tagged.image.content)
tagged.imageFile = path
tagged.save()发布于 2012-12-08 17:56:12
多亏了Mike Fogel的回答,我在迁移中解决了这个问题,将图像从一个模型移动到另一个模型:
from south.v2 import DataMigration
from .. models import upload_by_conditions
from .. models import RESOURCE_IMAGE
class Migration(DataMigration):
def forwards(self, orm):
src = orm['uploader.Queue']
dst = orm['uploader.Resource']
for item in src.objects.all():
obj = dst(
kind=RESOURCE_IMAGE,
file_name=item.file_name,
file_type=item.file_type,
file_size=item.file_size,
)
# here I assign own handler!!!
obj._meta.get_field('resource').generate_filename = upload_by_conditions
obj.resource.save(item.file_name, item.image, save=True)https://stackoverflow.com/questions/6968789
复制相似问题