Google App Engine。 TextProperty重置为“”

时间:2013-08-25 23:03:26

标签: python google-app-engine

我经营一个小型视频游戏。每个玩家都有一个具有各种属性的帐户模型。

我最近添加了一个TextProperty来跟踪玩家徽章。这些只是一个ASCII字符,在被授予时附加到account.badges属性。

由于正确是新的,大多数帐户模型都没有此属性。在整个网站的大约3个地方,我有一些看起来像这样的代码

if not player.badges:
  player.badges = ""

player.badges += "A"
player.put_memcache()
player.put()

出于某种原因,其中一个玩家徽章一直被重置为“”(空字符串)。我不能为我的生活弄清楚如何或为什么。

之前我没有使用过TextProperties。是否有一些我不理解的奇怪行为?

TextProperties与memcache不一致吗?

帐户未重置为某个旧状态,因为其他属性似乎正在正确存储值。它就是这一个TextProperty。

无论如何,我很困惑,并会赞赏一些可以帮助我追踪问题的新想法。

问题解答

徽章属性就像这样定义

class Account(db.Model):

    badges = db.TextProperty()

    email = db.StringProperty()
    alias = db.StringProperty()
    avatar = db.IntegerProperty()

put_memchche只是memcache集的包装。

def put_memchche(self):
    memcache.set("account" + self.key().name(), self)

1 个答案:

答案 0 :(得分:1)

AFAIK,文字类似于字符串,区别在于文字可以包含更多字符而无法编入索引。如果您将默认值指定为“”,我认为您不需要if部分。它只发生在一个玩家身上吗?你确定它在运行时它击中了player.badges + ='A'。如果根据您的示例提供更多代码,则更容易调试,我没有看到为什么徽章不会更改的问题。