ndb.JsonProperty
ドキュメントに従い、カスタムプロパティを定義するときと同じように、定義make_value_from_datastore
とget_value_for_datastore
メソッドを実行します。
これらのメソッドをいつ呼び出すかは、アプリエンジン内のdb実装に依存するため、ドキュメントにはこれらのメソッドがいつ呼び出されるかは記載されていません。
ただし、モデルがデータベースにアクセスする必要があるときはいつでも、それらが呼び出される可能性が非常に高くなります。たとえば、次のドキュメントからget_value_for_datastore
:
プロパティクラスはこれをオーバーライドして、モデルインスタンスとは異なるデータ型をデータストアに使用したり、モデルインスタンスを保存する直前に他のデータ変換を実行したりできます。
何が起こっているのかを本当に確認する必要がある場合は、次のようにJsonPropertyの独自のサブクラスを提供できます。
class LoggingJsonProperty(ndb.JsonProperty):
def make_value_from_datastore(self, value):
with open('~/test.log', 'a') as logfile:
logfile.write('make_value_from_datastore called\n')
return super(LoggingJson, self).make_value_from_datastore(value)
必要に応じて、JSON文字列やバックトレースなどをログに記録できます。また、別のログに記録する代わりに、標準のログ機能を使用できることは明らかです。しかし、これは何が起こっているかを確認するのに十分なはずです。
もちろん、別のオプションは、にあると私が信じているコードを読むことですappengine/ext/db/__init__.py
。
文書化されていないため、詳細はバージョンごとに変わる可能性があります。100%確実にする必要がある場合は、アップグレードするたびにテストを再実行するか、コードを再読み込みする必要があります。