Использование couchdb.mapping и невозможно установить атрибут - PullRequest
0 голосов
/ 18 января 2012

Привет всем и профессионалам 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 по-прежнему возвращает мне пустой словарь после установки атрибута "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 голосов
/ 14 июня 2012

Я нашел проблему. По-видимому, couchdb-python не позволяет «создавать» новые ключи в документах, которые были созданы с использованием предыдущей модели отображения. Вы должны вручную добавить нужные ключи ко всем документам, прежде чем сможете установить для них значения.

...