python - Google App Engine - 如何扩展 db.IntegerProperty

标签 python google-app-engine

当我在整数和字符串之间交换很多时,我希望扩展 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'

最佳答案

我建议切换到 NDB。在 NDB 中,编写 IntegerProperty 的子类非常简单,它将值存储为整数,但接受整数或字符串(将字符串转换为整数)。这是一个草图:

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

仅此而已!

关于python - Google App Engine - 如何扩展 db.IntegerProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11239565/

相关文章:

python - 从 python 列表访问二进制数据时出错

python - Python 代码中的 mySQL 错误

google-app-engine - GoogleAppEngine 错误 : rdbms_mysqldb. py:74

google-app-engine - 如何在 GAE 中启用 Cloud Datastore API,以便另一个 GAE 应用程序可以与其通信?

google-app-engine - 如何在appengine dashboard的GQL Viewer中按键搜索?

java - 尝试在 GAE 中获取子对象时出现 JUDO ObjectNotFoundException

google-app-engine - 我可以拥有的最大 "POST"大小是多少?

python - Matplotlib:散点图中的垂直线

python - 多文件上传 DRF

python - py.test 无法处理创建文件