Я новичок в Odoo (работаю над Odoo 8), я создал мастер с полем one2many, ссылаясь на другую переходную модель.
Я добавил кнопку внутри древовидного представления, которая должна отображать детали строки (у каждой строки есть своя кнопка)
когда я получаю подробности для строки в первый раз, я получаю данные, которые я передал в контексте, однако данные не обновляются, когда я нажимаю детали для другой строки, он отображает контекст, который я передал сначала
как я могу это исправить, пожалуйста?
@Kenly я показываю это в другом мастере, всего 3 мастера
Конечно, но как вы передавали значения через контекст?
<tree string = "Шаблоны" editable = "bottom"> <field name = "title"/> <field name = "qty"/> <field name = "user_id"/> <field name = "society_id"/> < button name = "open_details" string = "details" type = "object" icon = "fa-phone" context = "{'default_title':title,'default_qty':qty}" /> </tree>
Я не делал, и это не работает, и я не знаю, почему
Что возвращает функция?
@api.multi def open_details(self): self.env.context = dict(self.env.context) print("************************** **************", dict(self.env.context)) return { 'имя': "Подробности", 'view_type': 'форма', 'view_mode': 'форма' , 'view_id': False, 'res_model': 'accommodation.details', 'src_model': 'accommodation.test', 'type': 'ir.actions.act_window', 'target': 'new', }
В первый раз, когда Odoo вызывает кнопку, контекст действия представляет собой список, содержащий атрибут контекста кнопки в виде строки:
Array [ "{'default_title':title, 'default_qty':qty}" ]
При следующем вызове (без обновления страницы) контекст оценивается как составной контекст, и контекст оценки неверен, поскольку он использует значения первой записи, и поэтому значения по умолчанию не изменились.
Если вы измените контекст оценки в handle_button, Odoo должен загрузить правильные значения по умолчанию.
Пример:
if (action.context && action.context.__contexts) {
action.context.__eval_context = this.records.get(id).toContext();
}
Вместо использования контекста кнопки для установки значений по умолчанию вы можете напрямую использовать контекст действия.
Пример:
@api.multi
def open_details(self):
self.ensure_one()
return {
'name': "Details",
'view_type': 'form',
'view_mode': 'form',
'view_id': False,
'res_model': 'accommodation.details',
'type': 'ir.actions.act_window',
'target': 'new',
'context': {'default_title': self.title, 'default_qty': self.qty}
}
Это сработало так, как я хотел, большое спасибо, сэр, за ваше время и ответ!
Как кнопка отображает детали?