使用couchdb.mapping并且无法设置属性

时间:2012-01-18 04:03:11

标签: python couchdb couchdb-python

嗨大家和couchdb专业人士,

我有这样的映射设置:

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获取的旧产品对象中没有“返回”键。这会有所作为吗?它应该不对,毕竟这是一个文档DB,它应该是灵活的吗?

为什么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':.......>

这是什么结果?是视图结果还是文档?

非常感谢任何帮助谢谢!

感谢。

1 个答案:

答案 0 :(得分:0)

我发现了问题。显然,couchdb-python不允许您在使用先前映射模型创建的文档中“创建”新密钥。在能够为它们设置值之前,您必须先手动将所需的键添加到所有文档中。