回答我自己的問題,我的同胞newbs。簡短的回答 - 使用LocalStructureProperty。我的理論是,在嵌套列表上創建索引(谷歌自動執行的)會很愚蠢。文檔沒有真正指出這一點,至少從我的閱讀中,或者它可能和我只是不知道足以「得到它」。但是,LocalStructuredProperties不創建索引,並且我的設置現在可以正常工作。如果您需要列表格式的數據庫對象的本地副本(不是引用) - 也有本地列表作爲屬性 - localStructuredProperty可能是您需要的。
我想去過這一點更詳細,和一對夫婦的選擇我使用標準的數據存儲審判,NDB JSON財產數據類型
我的模型類之前看起來是這樣的
class Character(ndb.Model):
name = stringProperty()
weaponList = StructuredProperty(WeaponModel.Weapon, repeated=True)
class WeaponModel(ndb.Model):
name = stringProperty()
curseList = StructuredProperty(BufferModel.Curse, repeated=True)
class BufferModel(ndb.Model):
name = stringProperty()
我找回了上面提到的錯誤:無法重複StructuredProperty無重複屬性的屬性。
我決定做一個可能的解決方案的調查。
1)我切換到基本數據存儲DB(未NDB),並改變了一切的列表屬性
weaponList =的ListProperty(WeaponModel.Weapon)//你必須在這裏傳遞的數據類型,因此它知道什麼它將被存儲
原來,Listproperty只允許已知數據存儲類型(鍵,字符串,整數)的列表 - 因此存儲我的模型實體不起作用。儘管如此,存儲密鑰列表。
weaponList = ListProperty(db.key)
它工作得很好。爲了允許用戶編輯或創建自己的武器,我可以在武器上添加一個創建者屬性,然後根據這個或其他參考(如公開或私有)進行查詢。
真的不喜歡這個想法。無論出於何種原因,意大利麪怪獸的想法不斷涌現在我的頭上,所以我想 - 在NDB這個JSON對象的傢伙怎麼樣?
構建東西的大多是僞代碼版本會是什麼樣子:
aCurse = getcurse
aJsonCurse = json.dump(aCurse)
aWeapon = getWeapon(curseList=[aJsonCurse])
aJsonWeapon = json.dump(aWeapon)
aCharacter.weaponList = [aJsonWeapon]
,但它沒有工作,很容易。該武器有json物體,之前被自己傾倒到json,所以用嵌套json傾倒武器並不是很好。我用不同的方式構建了它的工作,但意大利麪怪物開始大笑,所以我停下來去吃午飯。
當我回來時,我想我會再看看文檔。結構化和LocalStructured之間唯一的區別在於缺乏索引,這似乎沒有幫助,但我想我會放棄它 - 並且它工作正常。好吧,我不會出錯,我可以根據需要檢索實體 - 誰知道潛在的危險。
希望這會指出一些盲人正確的方向。