我使用NDB和稱爲MBObject的Expando模型,因爲我無動態創建對象並且沒有固定方案。我從字典中創建對象:GAE Expando動態設置屬性類型
dic = {"groupName" : "my group",
"members" : [{"memberId" : "1"}, {"memberId" : "2"}]}
所以我想要做的就是創建一個具有稱爲成員財產,其中的成員是MBObjects的LocalStructuredProperty一組對象。 (所有的對象都是MBObject的,ndb.Expando的子類)
然而,似乎沒有要動態指定第二部分的方式,我得到錯誤:
def config_obj_from_dic(dictionary):
object = MBObject()
for key, value in dictionary.iteritems():
if isinstance(value, list):
objects = list()
for dic in value:
objects.append(config_obj_from_dic(dic))
value = objects
setattr(object, key, value)
return object
所以基本上我最終得到了一個成員列表,並嘗試將其設置爲對象的屬性,並希望它自動實現我想要重複的LocalStructuredProperty。所以很明顯,我看到問題出在哪裏,它本身不夠聰明。問題是,我將如何處理它?
如果它不會與LocalStructuredProperty一起工作,那麼我也可以使用ndb.JsonProperty,但它仍然是同樣的問題:我如何動態地告訴它,我希望這是一個屬性某種類型?
TL;博士:如果我有在Expando模型,和我做setattr(object, key, a_list)
,在這裏我設置一個屬性的列表,我怎麼可以讓它知道我想要一個LocalStructuredProperty
或JsonProperty
,因爲現在它不不知道該如何處理該清單。