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

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

因为适当的是新的,所以大多数帐户模型没有此属性。在整个站点的大约3个地方,我有一些看起来像这样的代码

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

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


由于某些原因,其中一个玩家徽章会不断重置为“”(空字符串)。我无法为自己的生活弄清楚如何或为什么。

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

TextProperties不能与内存缓存配合使用吗?

该帐户未重置为某些旧状态,因为其他属性似乎可以正确存储值。它就是这个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)

最佳答案

AFAIK,文本类似于字符串,不同之处在于文本可以包含更多字符且无法编制索引。如果将默认值指定为“”,我认为您不需要if部分。只会发生一位玩家吗?您确定在运行时会碰到播放器。徽章+ ='A'。如果您提供更多代码,则调试起来会更容易,根据您的示例,我看不出徽章没有更改的问题。

10-07 18:27