我有一個用戶ndb.Model有一個用戶名StringProperty,允許大寫小寫字母,在某些時候我想通過用戶名獲取用戶,但有必要的情況下,小寫的過濾。爲此我添加了一個ComputedProperty到用戶:ndb ComputedProperty過濾
@ndb.ComputedProperty
def username_lower(self):
return self.username.lower()
然後我過濾查詢,像這樣:username_lower如下返回的用戶名的小寫版本
query = query.filter(User.username_lower==username_input.lower())
這工作,但它只做了用戶在之後創建(放)我將此添加到模型中。以前創建的用戶不會被此查詢過濾。我首先認爲ComputedProperty不適用於老用戶。但是,嘗試過這一點,並且對舊用戶調用.username_lower確實可行。
最後,我發現了一個解決方案是獲取所有用戶,只是運行一個.put_multi(ALL_USERS)
所以好像稍後添加到模型ComputedProperty當你調用它直但不工作首先過濾。它不會自動編入索引嗎?或者它可能是一個緩存的東西..?
任何瞭解爲什麼它表現得就像這將是受歡迎的
感謝
好吧有道理,謝謝! – joplaete