1

根據我在文檔中讀到的內容,在將實體的父代放入數據存儲後,不可能更改它的父代。但是我正在尋找一種在發生這種情況之前更改父級的方法(但在創建之後)。因此,而不是有這樣的:如何在創建實體後將其添加到數據存儲區之前添加/更改實體的父代?

John = Student(parent=BlueClassroom.key, name="John", last_name="Smith") 
John.put() 

我期待這樣的事情:

John = Student(name="John", last_name="Smith") 
John.parent = BlueClassroom.key 
John.put() 

現在,第一個作品,但第二個沒有(它只是忽略第二個行)。我也嘗試使用填充,但只適用於常規屬性。有沒有辦法做到這一點?

+0

聲明'John.parent = BlueClassroom.key'是不會改變的關鍵,它只是將一個名爲'parent'的新屬性添加到實體'John'中。 你的第一個例子是設置鍵的父母的正確方法,爲什麼不知道父母時使用它? –

+0

因爲我不知道父母在那個階段是什麼,這是在另一個函數中確定的。我應該重新安排一切,以便我可以在一個地方做到這一點,但我想知道是否有辦法像現在這樣做。 –

回答

0

按照NDB Model Class Constructor文檔:

你不能簡單的定義爲 「關鍵」, 「ID」, 「父母」,或 「命名空間」 屬性。例如,如果在構造函數中調用key =「foo」或調用populate(),則它將設置實體的密鑰,而不是名爲「key」的屬性屬性 。

我建議各地傳遞數據作爲一個字典,直到你準備創建實體:

john = {name="John", last_name="Smith"} 
... 
John = Student(parent=BlueClassroom.key) 
John.populate(john) 
+0

我曾在文檔中看到過,但我想知道是否還有一種方法可以在此之後定義父項(但在放置之前)。由於我找不到辦法做到這一點,我只是將這些數據作爲字典來傳遞。 –

相關問題