Использование couchdb.mapping и невозможно установить атрибут
Привет всем и плюсы couchdb,
У меня есть настройки отображения, такие как:
class Product(BaseModel):
name= mapping.TextField()
returned = mapping.DictField(mapping.Mapping.build(
reason = mapping.TextField(),
put_back = mapping.BooleanField()
))
У меня есть функция с именем getById, которая принимает идентификатор и возвращает продукт через:
return Product.load(db, id)
У меня проблема: когда я загружаю конкретный продукт и пытаюсь установить возвращаемый словарь, например:
product = Product.getById("123")
product.returned
>>> {}
product.returned['reason'] = "Test"
product.returned
>>> {}
ПРИМЕЧАНИЕ: я только недавно изменил модель, чтобы получить "возвращенный" ключ. Старые объекты продукта, полученные с использованием getById, не имеют в себе "возвращенного" ключа. Будет ли это иметь значение? Это не должно быть правильным, ведь это документ БД и оно должно быть гибким, верно?
Почему product.returned по-прежнему возвращает мне пустой словарь после установки атрибута "причина"?
Я сделал некоторую отладку и понял, что переменная продукта имеет форму:
<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 ответ
Я нашел проблему. По-видимому, couchdb-python не позволяет "создавать" новые ключи в документах, которые были созданы с использованием предыдущей модели отображения. Вы должны вручную добавить нужные ключи ко всем документам, прежде чем сможете установить для них значения.