Использование 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 не позволяет "создавать" новые ключи в документах, которые были созданы с использованием предыдущей модели отображения. Вы должны вручную добавить нужные ключи ко всем документам, прежде чем сможете установить для них значения.

Другие вопросы по тегам