私は NDB と MBObject という Expando モデルを使用しています。これは、固定スキームなしで動的にオブジェクトを作成しているためです。辞書からオブジェクトを作成します。
dic = {"groupName" : "my group",
"members" : [{"memberId" : "1"}, {"memberId" : "2"}]}
だから私がやりたいことは、メンバーと呼ばれるプロパティを持つグループ オブジェクトを作成することです。ここで、メンバーは MBObjects の LocalStructuredProperty です。(すべてのオブジェクトは MBObject の、ndb.Expando のサブクラスです)
ただし、2 番目の部分を動的に指定する方法がないようで、エラーが発生します。
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;dr: Expando モデルがありsetattr(object, key, a_list)
、プロパティをリストとして設定する場合、 aLocalStructuredProperty
または aが必要であることをどのように知らせるJsonProperty
ことができますか?なぜなら、そのリストをどう処理するかがわからないからです。 .