StringPropertyをブレークコードなしでIntegerPropertyに変換し、種類のすべてのエンティティを変更せずに動的に行うにはどうすればよいでしょうか?プロパティの変更
明らかに、データが正しいと仮定します。例えば
: StringProperty = u'1234' = 1234
IntegerPropertyに変換を使用すると、フェッチデータをintにSTRから、モデル内のプロパティを変更する場合は今、このプロパティはどれも
おかげ
StringPropertyをブレークコードなしでIntegerPropertyに変換し、種類のすべてのエンティティを変更せずに動的に行うにはどうすればよいでしょうか?プロパティの変更
明らかに、データが正しいと仮定します。例えば
: StringProperty = u'1234' = 1234
IntegerPropertyに変換を使用すると、フェッチデータをintにSTRから、モデル内のプロパティを変更する場合は今、このプロパティはどれも
おかげ
あなたはまたたくComputedPropertyを試してみてください:
うまくいけば、独自のプロパティタイプを定義することができます。
class Str2IntProperty(Property):
"""A Property whose original string value will be converted to an integer."""
def _validate(self, value):
if not isinstance(value, (int, long, str)):
raise datastore_errors.BadValueError('Expected integer, got %r' %
(value,))
return int(value)
def _db_set_value(self, v, unused_p, value):
if not isinstance(value, (str, int, long)):
raise TypeError('Str2IntProperty %s can only be set to integer or string values; '
'received %r' % (self._name, value))
v.set_int64value(int(value))
def _db_get_value(self, v, unused_p):
if not v.has_int64value():
try:
return int(v)
except ValueError:
return 0
return int(v.int64value())
そして、モデル内の
class MyModel(ndb.Model):
my_prop = Str2IntProperty()
あなたはGenericPropertyプラス整数に文字列を変更し、戻ってそれを書き、ポスト得るフックを使用することができます。ライトバックを非同期にすることができます。
はい私はNDBを使用していますが、同じ名前を保持したいのは、タイプを変更するだけです。例。 marca = ndb.StringProperty() - > marca = ndb.IntegerProperty() – user1187859