2014-03-07 4 views
1

두 엔티티를 생성하는 순간 한 클래스의 엔티티를 다른 엔티티와 연관시킬 수 있기를 원합니다. 부모는 다른 엔터티를 가리키는 키를 가질 것이다). 엔티티가 데이터 저장소에 저장되기 전에 엔티티의 키를 가져올 수 없습니다. 엔티티 중 하나를 두 번 저장하지 않고도 위의 작업을 수행 할 수있는 방법이 있습니까?엔티티를 ndb에 저장하기 전에 해당 키로 엔티티를 참조합니다.

내가 뭘하려고 오전
class A(ndb.Model): 
    key_of_b = ndb.KeyProperty(kind='B') 

class B(ndb.Model): 
    pass 

: 키가 저장되는 엔티티 이전에 할당되지 않는 경우

a = A() 
b = B(parent=a.key) 
a.key_of_b = b.key 

a.put() 
b.put() 

, 어쨌든이 할 수있다 아래

은 예입니다 직접 만드시겠습니까? 이를 달성 할 방법이 없습니까 아니면 유일한 해결책은 엔티티 중 하나를 두 번 저장하는 것입니까?

답변

3
당신은라는 이름의 키를이 작업을 수행 할 수 있지만, 당신은 당신이 고유 키와 두 엔티티의 이름을 할 수 있는지 확인해야

그러나

# It is possible to construct a key for an entity that does not yet exist. 
keyname_a = 'abc' 
keyname_b = 'def' 
key_a = ndb.Key(A, keyname_a) 
key_b = ndb.Key(A, keyname_a, B, keyname_b) 

a = A(id=keyname_a) 
a.key_of_b = key_b 
b = B(id=keyname_b, parent=key_a) 

a.put() 
b.put() 

, 나는 당신의 key_of_b 프로퍼티를 필요로하는 이유에 대해 생각 제안을 첫 번째 장소. 당신은 단지 B의 부모로 A을 설정하면 당신은 항상 BA에서에서 탐색 할 수 있으며 다른 주변 방법 :

# If you have the A entity from somewhere and want to find B. 
b = B.query(ancestor=entity_a.key).get() 

# You have the B entity from somewhere and want to find A. 
a = entity_b.key.parent().get() 

이것은 또한 당신에게 일대 다 관계를 만들 수있는 기회를 제공합니다 AB 사이

관련 문제