2012-01-18 98 views
0

大家好和CouchDB的利弊,使用couchdb.mapping,無法設置屬性

我有一個映射設置像這樣:

class Product(BaseModel): 
    name= mapping.TextField() 
    returned = mapping.DictField(mapping.Mapping.build(
    reason = mapping.TextField(), 
    put_back = mapping.BooleanField() 
)) 

我有一個叫getById函數,它的ID,並返回通過產品:

return Product.load(db, id) 

我有一個問題:當我打開一個特定的產品,並嘗試設置返回的字典像這樣:

product = Product.getById("123") 
product.returned 
>>> {} 
product.returned['reason'] = "Test" 
product.returned 
>>> {} 

注意: 我只是最近修改模型有「返回」鍵。使用getById獲得的舊產品對象沒有「返回」鍵。這會有所作爲嗎?它不應該是正確的,畢竟這是一個文檔數據庫,它應該是靈活的嗎?

爲什麼product.returned在設置「reason」屬性後仍然會返回空字典?

我做了一些調試,實現了產品變量的形式爲:

<Product u'f90173026e859c65cfa08496115bf7bf'@u'11-3ea1135ceb6361631cbb08471d15df1e' {u'name': u'Printer', u'subProducts': [], u'company': {u'id': u'HP', u'name': u'Hewlett-Packard'}, u'productType':.......> 

什麼樣的結果,這是?它是一個查看結果還是它是一個文檔?

任何幫助非常感謝,謝謝!

謝謝。

+0

我發現了這個問題。顯然,couchdb-python不允許你在使用先前映射模型創建的文檔中「創建」新的鍵。您必須首先手動將所需的密鑰添加到所有文檔,然後才能爲其設置值。 – Mark 2012-01-20 05:42:12

回答

0

我發現了這個問題。顯然,couchdb-python不允許你在使用先前映射模型創建的文檔中「創建」新的鍵。您必須首先手動將所需的密鑰添加到所有文檔,然後才能爲其設置值。

+0

你可以給出代碼示例,你做了什麼? – msangel 2014-04-25 04:44:31