2013-08-25 171 views
1

我運行一個小型視頻遊戲。每個玩家都有一個包含各種屬性的賬戶模型。Google App Engine。 TextProperty重置爲「」

我最近添加了一個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就位於內存緩存設置的包裝。

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

你如何定義徽章屬性? put_memcache做什麼?另外我認爲你不需要if部分,如果你將默認值定義爲「」 – marcadian

+0

不知道發生了什麼(afaict,你做得對),但也許你可以通過添加日誌記錄來幫助你自己弄清楚。導入日誌; logging.debug('這會出現在你的日誌中)。 – allyourcode

+0

感謝Marcadian,我會添加一個默認值並刪除ifs。謝謝allyourcode。我確實在這個地方做了很多日誌記錄,我可能會在這個玩家帳戶附近添加一些特殊日誌。 –

回答

1

AFAIK,文字類似於字符串,區別只是文字可以包含更多字符而且不能被索引。如果你指定默認爲「」,我認爲你不需要if部分。這是否只發生在一名球員身上?你確定在運行時碰到了player.badges + ='A'。根據你的例子,如果你提供更多的代碼,調試會更容易,我沒有看到問題爲什麼徽章沒有改變。