2012-02-15 103 views
1

什麼將最好的方式將StringProperty轉換爲不帶中斷代碼的IntegerProperty,並且在不改變某種類型的所有實體的情況下動態執行此操作?更改屬性格式

顯然假設數據是正確的。

例如: StringProperty = u'1234' 轉變爲IntegerProperty = 1234

現在,如果你從STR修改屬性模型獲取數據時該屬性爲int說無

感謝

回答

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.InteProProperty() – user1187859 2012-02-15 14:25:57

2

您可以使用GenericProperty加上後得到掛鉤,改變字符串爲整數,並將其寫入回來。您可以使回寫異步。