2011-08-30 5 views
2

내가 이런 걸하고 싶지 :엔티티의 부모를 속성으로 설정하는 방법은 무엇입니까?

e = Employee(key_name = 'john',name='john the first') 
e.put() 
a = Address(key_name='addr_john',street='66th street') 
a.parent = e; 
a.put(); 

addr = Address.gql("WHERE ANCESTOR IS :1", e).fetch(1) #len(addr)==0 

을하지만 내가 생성자에서 부모를 설정하면 그냥 작동, 작동하지 않습니다.

a = Address(key_name='addr_john',street='66th street',parent=e) 

하지만 저는 그것을하고 싶지 않습니다. 객체를 만든 후에해야합니다.

답변

4

엔티티의 부모는 생성 중에 만 설정할 수 있으므로 db.Model 하위 클래스 인스턴스의 생성자에서만 설정할 수 있습니다. parent 속성에 db.Model 인스턴스를 할당하려고 시도하면 해당 parent() 함수가 덮어 쓰기되지만 해당 데이터 스토어 엔터티의 실제 상위는 변경되지 않습니다.

자식 개체 생성 중에 설정할 수없는 관계가있는 경우 일반 속성으로 코딩해야합니다. (필요한 트랜잭션으로 인해 부모 - 자식 관계를 가질 여유가없는 경우) 부모 개체를 결정해야만 자식 개체 생성을 연기 할 수 있습니다. 또한 하위 엔티티에 key_name을 설정하기 위해 부모 데이터 (예 : name : Employee)를 사용 했으므로이 방법이 의미가있는 것처럼 보입니다. 부모와 마찬가지로 키 이름도 엔터티를 만드는 동안 만 설정할 수 있습니다.

+0

감사합니다. 나는 그들 모두가 주어진 ParentObject로부터 자식 인 많은 수의 객체들을 만들고 싶다. 그래서 그 ParentObject에 put_async를 만들고 그 ChildObjects를 만들고 그 후에 부모를 할당합니다. 그렇게 나쁜 일은 할 수 없습니다. 모델에 키를 다시 할당하는 몇 가지 방법을 알고 있습니까? 내가 키를 생성하고 모든 것이 발생하면 ChildObject에 할당 할 수있게되었습니다. – santiagobasulto

+0

@santiagobasulto : 오브젝트를 만든 후에 키를 변경하는 것은 불가능합니다. 단, 동일한 데이터로 새 엔티티를 생성하고 이전 엔티티를 삭제하는 것은 예외입니다. – geoffspear

+0

감사합니다. 나는 똑같은 방식으로 모든 것을 계속해야 할 것이다. – santiagobasulto

관련 문제