Как установить триггер хранилища для вычисляемых полей в Odoo 8?

Я начал использовать новый API Odoo v8.0, но не могу найти полезную информацию о триггере хранилища в таких вычисляемых полях (для v7.0 и v6.1): Сохранить параметр в Odoo v6

В Odoo v8.0 я пытался использовать тот же синтаксис, что и в v7.0, но не смог заставить его работать, потому что ответ JSON не может быть возвращен веб-клиенту:

<function _store_trigger> is not JSON serializable.

Затем я прочитал, что параметр хранилища был преобразован только в логическое поле (без словаря для триггеров): функция хранилища Odoo : JSON не сериализуем

Итак, как я могу настроить триггер для хранения значений в базе данных для вычисляемых (и связанных) полей? Я хочу сделать фильтры и группы в основном для них, поэтому search function не будет полезен.


person Anass Ahmed    schedule 09.04.2015    source источник


Ответы (1)


В V8 вы можете использовать любые поля в качестве вычисляемых полей. В хранилище V8 есть параметр, который является логическим и по умолчанию имеет значение false.

Если вы явно зададите "store=True", зависимое поле, указанное вами в @api.depends('name'), будет действовать как триггерное поле.

Вы можете указать другое поле объекта в качестве триггерного поля, которое будет обязательным в модуле учета, например @api.depends('other_object.field_name')

upper = fields.Char(compute='_compute_upper', store=True)

@api.depends('name')
def _compute_upper(self):
    for rec in self:
        self.upper = self.name.upper() if self.name else False

Если "false", то значение не сохраняется в базе данных и будет вычисляться каждый раз.

upper = fields.Char(compute='_compute_upper')
person no coder    schedule 09.04.2015
comment
так что store=True будет обновлять значение каждый раз, когда оно изменяется? как насчет смежных полей? - person Anass Ahmed; 09.04.2015
comment
после некоторых попыток и тестов. Я вижу, что api.depends запускает store=True при каждом изменении поля. - person Anass Ahmed; 09.04.2015