2012-02-15 29 views
1

StringPropertyをブレークコードなしでIntegerPropertyに変換し、種類のすべてのエンティティを変更せずに動的に行うにはどうすればよいでしょうか?プロパティの変更

明らかに、データが正しいと仮定します。例えば

: StringProperty = u'1234' = 1234

IntegerPropertyに変換を使用すると、フェッチデータをintにSTRから、モデル内のプロパティを変更する場合は今、このプロパティはどれも

おかげ

答えて

1
を言いませんあなたはNDBを使用している場合

あなたはまたたくComputedPropertyを試してみてください:

https://docs.google.com/document/d/1dsx1hihmMXMJm8wIRu49tJR-KEng80o3wkg4Nlbqn-w/edit#heading=h.crpcpjr4rp21

うまくいけば、独自のプロパティタイプを定義することができます。

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() 
+0

はい私はNDBを使用していますが、同じ名前を保持したいのは、タイプを変更するだけです。例。 marca = ndb.StringProperty() - > marca = ndb.IntegerProperty() – user1187859

2

あなたはGenericPropertyプラス整数に文字列を変更し、戻ってそれを書き、ポスト得るフックを使用することができます。ライトバックを非同期にすることができます。

関連する問題