您好我試圖將DataStore背後的概念作爲無SQL數據庫,我試圖獲取的是一個對象的列表,它已被另一個「引用」。由於這谷歌App Engine返回對象與參考集
class Person(db.Model):
name = db.StringProperty(required=True)
class Contact(db.Model):
name = db.StringProperty(required=True)
email = db.StringProperty()
trader = db.ReferenceProperty(Person)
這工作得很好,他們得到當我使用person.put()沒有任何問題進行保存。但是當我嘗試檢索它並將其編碼爲json時,它的內聯向我顯示聯繫人作爲列表,實際上它完全忽略了它。
persons_query = Person.all()
persons = persons_query.fetch(50)
data = json.encode(persons)
我希望人有一個聯繫人的集合,但它不知道如何解決這個問題?
這樣可以很清楚目前我得到的東西是這樣的:
[
{
name: "John Doe"
}
]
我想是
[
{
name: "John Doe"
contacts: [{name:"Alex", email:'[email protected]'}]
}
]
編輯
感謝所有你是對的,我需要獲取聯繫人的集合只有一個問題,因爲當聯繫人被編碼時,它遞歸地嘗試編碼交易者對象以及它的聯繫方式等。
因此,我得到了一個明顯的錯誤遞歸錯誤,解決方案顯然是從聯繫人中刪除交易者對象時,它正在編碼。
如果我想找回在同一個對象的所有人員和他交往? – Necronet
您必須對Person對象中的聯繫人進行非規範化並存儲副本。如果您經常查詢人員,這可能是一個很好的方法,因爲這樣可以避免查詢聯繫人。但是,它也將由您來保持數據與實際聯繫人同步。或者,如果您不介意執行額外的查詢,則可以將兩者合併爲一個字典並通過json編碼器運行。 – dragonx