2

整数と文字列を頻繁に交換するときに、db.IntegerPropertyを拡張したいと思っていました。以下は、いくつかのコードスニペットと、AppLauncherのログに表示されるエラーメッセージです。ポインタはありますか?ありがとうDavid

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'
4

1 に答える 1

3

NDB に切り替えることをお勧めします。NDB では、値を整数として格納し、整数または文字列を受け入れる (文字列を整数に変換する) IntegerProperty のサブクラスを作成するのは非常に簡単です。ここにスケッチがあります:

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

それで全部です!

于 2012-06-28T17:47:43.857 に答える