我正在尝试编写一个保存实例图像字段的小函数。
def save_image_to_model(instance, **kwargs):
fieldname = kwargs.pop('fieldname')
imgpath = kwargs.pop('imgpath')
imagefile_name = urlparse(imgpath).path.split('/')[-1]
instance.fieldname.save(imagefile_name,
ContentFile(urllib2.urlopen(imgpath).read()))
instance.save()
但我正在
'MyModel' object has no attribute 'fieldname'
我称之为:
save_image_to_model(myinstance, fieldname='bg_image', imgpath='http://.../img.png')
我考虑使用getattr(instance, fieldname)
,但我不确定这是否正确。
我怎样才能做到这一点?
更新:
我刚试过:
instance.getattr(instance, fieldname).save(imagefile_name,
ContentFile(urllib2.urlopen(imgpath).read()))
我正在'MyModel' object has attribute 'getattr'
答案 0 :(得分:1)
未经测试的代码,但会告诉您如何使用getattr
def save_image_to_model(instance, **kwargs):
fieldname = kwargs.pop('fieldname')
imgpath = kwargs.pop('imgpath')
imagefile_name = urlparse(imgpath).path.split('/')[-1]
data = urllib2.urlopen(imgpath).read()
field = getattr(instance, fieldname)
field.save(imagefile_name, ContentFile(data))
instance.save()