У нас есть форма с полями. Мы добавили нашу собственную кнопку "Сохранить" и хотим сохранить данные в форме на сервере при нажатии этой кнопки.
Мы знаем, как создавать действия на сервере для обработки нажатий кнопок, но не знаем, как получить данные формы.
В настоящее время мы используем встроенную кнопку "Сохранить", но нам нужно активировать некоторые дополнительные функции, отсюда и запрос.
Вот как сейчас выглядит наш XML.
<record model="ir.ui.view" id="petra_ticket_hold_dialog">
<field name="name">petra.ticket_request.hold.dialog</field>
<field name="model">petra.ticket_request</field>
<field name="arch" type="xml">
<form string="Hold Ticket" edit="false" create="false" delete="false">
<sheet>
<group colspan="2">
<field name="hold_reason"/>
<field name="status" invisible="1"/>
</group>
<button string="Save" />
</sheet>
</form>
</field>
</record>
Ответ 1 · рейтинг 3 · Danila Ganchar
Вот небольшой пример, который может вам помочь. Прежде всего вам нужно добавить какое-то действие модели к кнопке, например:
<record model="ir.ui.view" id="petra_ticket_hold_dialog">
<field name="name">petra.ticket_request.hold.dialog</field>
<field name="model">petra.ticket_request</field>
<field name="arch" type="xml">
<form string="Hold Ticket" edit="false" create="false" delete="false">
<sheet>
<group colspan="2">
<field name="hold_reason"/>
<field name="status" invisible="1"/>
</group>
<!-- it means that will be calls method 'action_my_action' of object 'petra.ticket_request' -->
<button string="Save" name="action_my_action" type="object"/>
</sheet>
</form>
</field>
</record>
После этого вам нужно добавить метод в вашу модель:
# you can use @api.multi for collection processing like this:
# for ticket in self: ...something do here
# or you can use @api.model for processing only one object
@api.model
def action_my_action(self):
# here you have values from form and context
print(self.hold_reason, self._context)
# todo something here... and close dialog
return {'type': 'ir.actions.act_window_close'}
Перезапустите openerp-server и обновите модуль.
Будь осторожен! Объект будет сохранен в БД до вашего action_my_action. Надеюсь, это поможет вам.