1

環境

次のデータ構造があります。

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}

JSON コンテンツ -- Firefox のスクリーンショット

AngularJS $リソース

4

1 に答える 1

1

バグを報告していますか、それとも機能をリクエストしていますか? populate() メソッドでは、パラメーターの型がプロパティの宣言された型 (この場合は Birthday インスタンス) と一致する必要があります。

populate() に渡すJSON dictの内容(および正確にどのように渡すか)を示すと役立ちます。

おそらく解決策は、JSON dict から「birthday」値を取得し、それを使用して Birthday インスタンスを作成するのと同じくらい簡単です。しかし、確実に知るにはあなたのコードを見る必要があります。

于 2012-09-11T21:42:10.027 に答える