django - 保存实例 - 属性作为变量 - 不起作用

时间:2014-10-23 09:46:57

标签: python django django-models

我正在尝试编写一个保存实例图像字段的小函数。

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'

1 个答案:

答案 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()