2014-03-07 46 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財產第一個地方。如果只設置AB父,那麼你將總是能夠從A導航到B和周圍的其他方法:這也讓您有機會創建一個一對多的關係

# 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之間。

相關問題