我经营一个小型电子游戏。每个玩家都有一个具有各种属性的帐户模型。
我最近添加了一个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'。如果您提供更多代码,则调试起来会更容易,根据您的示例,我看不出徽章没有更改的问题。