2012-06-28 26 views
2

當我在整數和字符串之間切換很多我希望擴展db.IntegerProperty。以下是一些代碼片段和我在App Launcher日誌中獲得的錯誤消息。 任何指針? 感謝 大衛谷歌應用程序引擎 - 如何擴展db.IntegerProperty

class FSIdProperty(db.IntegerProperty): 
    def getasstring(self): 
     value = super(FSIdProperty, self) 
     if value: 
      return "%01d" % value 
     else: 
      return '' 
    def setasstring(self, value): 
     if isinstance(value, str): 
      value = value.replace(',', '') 
      value = value.replace(' ', '') 
     newvalue = super(FSIdProperty, self) 
     newvalue = int(value) 
     return newvalue 
    asstring = property(getasstring, setasstring) 
... 
class dcccategory(db.Model): 
    categoryid = FSIdProperty(verbose_name="Category Id") 
    sortorder = FSIdProperty(verbose_name="Sort Order") 
    description = db.StringProperty(verbose_name="Description") 
    created_at = UtcDateTimeProperty(verbose_name="Created on", auto_now_add=True) 
    modifiedon = UtcDateTimeProperty(verbose_name="Modified on", auto_now=True) 
    modifiedby = db.UserProperty(verbose_name="Modified by", auto_current_user=True) 
... 
outopt = { 
     'formtitle': 'Category Maintenance', 
     'categoryid': pcategory.categoryid.asstring(), 
     'sortorder': pcategory.sortorder.asstring(), 
     'description': pcategory.description, 
     'categorys': pcategorys, 
     'formerror': ''} 
... 
    File "C:\_PythonApps\costcontrol\fcccategorymaint.py", line 17, in displayone 
    'categoryid': pcategory.categoryid.asstring(), 
AttributeError: 'int' object has no attribute 'asstring' 

回答

3

我建議切換到NDB。在NDB中,編寫IntegerProperty的子類非常簡單,它將值存儲爲整數,但接受整數或字符串(將字符串轉換爲整數)。這裏有一個草圖:

class MyIntegerProperty(ndb.IntegerProperty): 
    def _validate(self, val): 
    if isinstance(val, basestring): 
     return int(val) 

就這樣!

+0

謝謝,我會看看。 –