0
@property 
def returns_an_int(self): 
    some_var = do_something_that_returns_int() 
    if some_var: 
     return int(some_var) 
    else: 
     return 0 

我有一個屬性使用上面的代碼,這是應該(並)確實返回一個int。 (我把int鑄造在它上面來仔細檢查)然而,當我嘗試使用它來命令獲取,cls.query().order(cls.returns_an_int)我得到了一個類型錯誤TypeError: order() expects a Property or query Order; received <property object at 0xsome-hex-address> - 我嘗試過使用+或 - 來查看我是否可以讓它獲得一個值,因爲我在其他問題中看到它,但它不起作用。我究竟做錯了什麼?我錯過了一些基本的東西來使它工作嗎?AppEngine Python的NDB類型錯誤.order()

回答

3

當您查詢數據存儲時,您需要查詢各種ndb.Property types之一。你正在查詢香草蟒屬性。這不起作用,因爲python屬性數據永遠不會存儲在數據存儲區中,因此數據存儲區無法通過它不知道的數據進行排序。

很難給出明確的建議如何解決這個問題。你可以做你的查詢,而不.order和排序在客戶端代碼:

return sorted(cls.query(), key=lambda item: item.returns_an_int) 

但不會對具有很多實體實體類型的工作。您也可以將您的屬性變更爲ndb.ComputedProperty

@ndb.ComputedProperty 
def returns_an_int(self): 
    some_var = do_something_that_returns_int() 
    if some_var: 
     return int(some_var) 
    else: 
     return 0 

這裏的缺點是,你存儲(和支付)更多的數據存儲的數據,你也執行每一個數據存儲投放returns_an_int方法。如果它是一種快速執行的方法,那應該不是問題,但如果它是一種緩慢的方法,您可能會開始注意到其中的差異。

+0

謝謝!那麼我可能最終會改變我的模型。 – Rudi