2014-10-23 2 views
-2

인스턴스의 이미지 필드를 저장하는 작은 함수를 작성하려고합니다.django - 인스턴스 속성을 변수로 저장 - 작동하지 않습니다.

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' 

을 얻고있다 : 나는 getattr(instance, fieldname) 사용에 대한 생각

save_image_to_model(myinstance, fieldname='bg_image', imgpath='http://.../img.png') 

그러나 이것은 올바른 방법입니다 있는지 확실하지 않다.

어떻게하면됩니까?

UPDATE : 난 그냥 시도

:

instance.getattr(instance, fieldname).save(imagefile_name, 
         ContentFile(urllib2.urlopen(imgpath).read())) 

내가 'MyModel' object has attribute 'getattr'

+1

추가하십시오 무엇입니까 모델 정의 및 전체 stacktrace :) – Wolph

+0

@ doniyor 당신은'getattr'이 "올바른 방법"이되지 않을 것이라고 어떻게 생각합니까? –

+1

@doniyor 아니요, getattr은 모델을 매개 변수로 사용하지 않습니다. getattr은 객체를 취해 관련 속성을 반환합니다. 그 대상이 무엇인지는 상관하지 않습니다. 바로이 경우에 맞는 솔루션입니다. –

답변

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() 
관련 문제