2008-09-26 74 views
1

有沒有一種方法來獲取db.ReferenceProperty的關鍵(或id)值,而不需要引用它指向的實際實體?我一直在挖掘 - 它看起來像密鑰存儲爲屬性名稱前面有一個_,但我一直無法獲得任何代碼工作。例子將不勝感激。謝謝。如何在沒有數據庫命中的情況下獲取db.ReferenceProperty的鍵值?

編輯:這是我曾嘗試失敗:

class Comment(db.Model): 
    series = db.ReferenceProperty(reference_class=Series); 

    def series_id(self): 
     return self._series 

而且在我的模板:

<a href="games/view-series.html?series={{comment.series_id}}#comm{{comment.key.id}}">more</a> 

結果:

<a href="games/view-series.html?series=#comm59">more</a> 

回答

13

實際上,您提倡訪問ReferenceProperty的密鑰的方式在將來可能不存在。在python中以'_'開頭的屬性通常被認爲是「受保護的」,因爲與其實現密切相關且密切的事物可以使用它們,但隨着實現更新的事物必須在其更改時更改。

但是,通過公共接口有一種方法可以訪問引用屬性的密鑰,以便將來可以安全使用。我會修改上面的例子:當你通過其關聯的類訪問屬性

class Comment(db.Model): 
    series = db.ReferenceProperty(reference_class=Series); 

    def series_id(self): 
     return Comment.series.get_value_for_datastore(self) 

,你得到的屬性對象本身,它具有可以得到基本價值的公共方法。

1

你是正確的 - 關鍵存儲爲以'_'爲前綴的屬性名稱。您應該能夠直接在模型對象上訪問它。你能證明你在嘗試什麼嗎?我過去曾經使用這種技術,沒有任何問題。

編輯:你是否嘗試過直接調用series_id(),或直接在模板中引用_series?我不確定Django是否會自動調用沒有參數的方法,如果您在此上下文中指定它們。你也可以嘗試在方法上放置@property裝飾器。

+0

Django不允許你訪問以_ – 2008-10-03 11:45:48

相關問題