我经营一个小型视频游戏。每个玩家都有一个具有各种属性的帐户模型。
我最近添加了一个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)
答案 0 :(得分:1)
AFAIK,文字类似于字符串,区别在于文字可以包含更多字符而无法编入索引。如果您将默认值指定为“”,我认为您不需要if部分。它只发生在一个玩家身上吗?你确定它在运行时它击中了player.badges + ='A'。如果根据您的示例提供更多代码,则更容易调试,我没有看到为什么徽章不会更改的问题。