Раствор 0
@api.multi
def check_tax_id(self):
self.ensure_one()
self.name = "New name"
return {
"type": "ir.actions.do_nothing",
}
Это решение было представлено here Тадеуша Карпинского.
Решение 1
Вы можете вернуть новую форму с тем же идентификатором записи.
@api.multi
def check_tax_id(self):
self.ensure_one()
self.name = "New name"
return {
'context': self.env.context,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'model_name',
'res_id': self.id,
'view_id': False,
'type': 'ir.actions.act_window',
'target': 'new',
}
Решение 2
Вы можете создать виджет в JQuery. Это откроет мастер, и вы можете назначить поведение, которое вы хотите для кнопок вручную. Вы можете использовать функцию call
для вызова функции питона, а также:
[...]
new instance.web.Dialog(this, {
title: _t("Title"),
width: '95%',
buttons: [
{ text: _t("First button"), click: function() { self.first_button(); }},
{ text: _t("Second button"), click: function() { self.second_button(); }},
{ text: _t("Close"), click: function() { dialog.close(); }},
],
});
[...]
Решение 3
Конечно вы можете переопределить метод создания, а также, чтобы избежать создания записи в некоторых случаях
Решение 4
Последний выбор. Создайте рабочий процесс с полем состояния. Создайте кнопки рабочего процесса, чтобы отправлять сигналы для изменения состояния. Вы можете показать или скрыть остальные поля, используя атрибут attrs и поле состояния. Но я не знаю, будет ли это соответствовать вашим потребностям.
Я нашел важную информацию здесь: https://github.com/odoo/odoo/issues/2270 –
В настоящее время ваше решение кажется единственным, что работает. –
Запись уже создана при запуске мастера, она не будет создаваться снова, если вы пройдете идентификатор текущего мастера, но будете созданы, если вы передадите False в res_id. – StackUP