環境
次のデータ構造があります。
class Birthday(ndb.Model):
day = ndb.IntegerProperty()
month = ndb.IntegerProperty()
year = ndb.IntegerProperty()
class User(ndb.Model):
name = ndb.StringProperty()
birthday = ndb.StructuredProperty(Birthday)
# ... other properties
問題
User のインスタンスでpopulate()メソッドを使用しようとすると、エラーが発生します: params の辞書ではなく、Birthday インスタンスが必要です。
誕生日プロパティを削除すると、すべて正常に機能します。User インスタンスには、params の辞書が取り込まれます。
populate() メソッドは構造化されたプロパティを認識し、それらにも自動的に入力するべきではありませんか?
手がかりはありますか?
ありがとう
PS: populate メソッドは、params ディクショナリに参照がある未知のプロパティを無視する寛容なモードを使用することもできます。
>>コメントを追加しました
いくつかのデータ型にアクセスして変更するために拡張された汎用 REST ハンドラーを使用しています。拡張機能は、アクセス/操作するモデル クラスを返すメソッド getModel() を定義する必要があります。モデル クラスはいくつかのメソッド、つまり create(cls, params) を実装する必要があります。
POST ハンドラーは、次の方法でパラメーター ($resouce を使用して AngularJS によって送信された -- 以下のリンク) を解析します。
# inside the generic REST Handler
params = json.loads(self.request.body, object_hook=self.datetime_decoder) # parse json params
...
self.getModel().create(params) # invokes the create method of the
モデル クラスは、次の方法で create メソッドを実装します。
@classmethod
def create(cls, params = None):
obj = cls()
if params:
obj.update(**params)
obj.put()
return True, obj
return False, None
JSON dictの内容は次のとおりです。
{"name":"Ana Matos","email":"ana.matos@nvd.com","phone":"+35196983465671","birthday":{"day":1,"month":0,"year":1980},"gender":"FEMALE","groups":["2012/2013"],"serviceProviderId":206133}