2013-09-08 11 views
3

GAE 기반 웹 애플리케이션에서 NDB Entity를로드하고 편집하려고합니다. 하지만 문제는 내가 편집하려고하는 필드가 문자열에서 동적으로 결정되므로 하드 코딩 할 수 없다는 것입니다. ndb 객체의 속성을 동적으로 설정하기

나는이 일을 시도했지만 아무도 그렇게 할 몇 가지 올바른 구문이 있어야합니다
obj[fieldName] = newValue 
obj.populate(fieldName,newValue) 
obj.populate(Modlue._properties[fieldName] = newValue) #keyword can't be an expression 
setattr(obj, fieldName,newValue) #value not being set 

을 일했다. 누군가가 당신이 안전하게 모델 클래스에 ndb.Expandondb.Model을 대체 할 수

+1

마지막 하나가 맞습니다. 값이 설정되지 않았다는 것을 어떻게 확인하고 있습니까? –

+2

대체로 채우기를 사용할 수는 있지만 사전은 전달할 수 있습니다. obj.populate (** {fieldname : newValue})'는 populate로 속성에 해당하는 이름 지정된 인수 세트를 취합니다. –

+0

@DanielRoseman 도움을 주셔서 감사합니다. 마지막으로 작업 했음 – Saqib

답변

1

뭘 찾는 것은 Expando class

것을 관한 도와 줄 수, 당신의 지속 실체는 여전히 완벽하게 사용할 수 있습니다.

참고 : 그러나 다른 방법으로는 작동하지 않을 수 있습니다. ndb은 클래스에 선언되지 않은 속성이있는 ndb.Model 엔티티를 조작 (가져 오기/가져 오기)하려고하면 충돌이 발생합니다.

관련 문제