Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сохранить данные формы с помощью пользовательской кнопки в Openerp/Odoo

Автор вопроса: frostymarvelousОтветов: 1

У нас есть форма с полями. Мы добавили нашу собственную кнопку "Сохранить" и хотим сохранить данные в форме на сервере при нажатии этой кнопки.

Мы знаем, как создавать действия на сервере для обработки нажатий кнопок, но не знаем, как получить данные формы.

В настоящее время мы используем встроенную кнопку "Сохранить", но нам нужно активировать некоторые дополнительные функции, отсюда и запрос.

Вот как сейчас выглядит наш 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>
  • Не лучше ли добавить дополнительную функциональность к существующей функции сохранения, а не добавлять новую альтернативную? Ludwik Trammer 05.04.2016
  • Мы занимаемся odoo всего 5 дней. К сожалению, документация не слишком велика. Мы были бы признательны, если бы вы могли показать нам, как или указать нам правильное направление. frostymarvelous 05.04.2016
  • Так что я просто посмотрел, и это не сработает для нас. По сути, у нас есть диалог, и его нужно закрыть после кнопки сохранения. Переопределение функции сохранения требует, чтобы мы возвращали true или false, поэтому мы не можем вернуть действие, чтобы закрыть окно. frostymarvelous 05.04.2016
  • Значит, это волшебник? и вы хотите сохранить то, что вы завершаете в мастере? dccdany 05.04.2016
  • @dccdany Как только вы нажмете кнопку, чтобы закрыть заявку, мы откроем диалоговое окно, в котором вам будет предложено ввести решение. В диалоговом окне мы показываем вам только диалоговое окно причины, которое обновляет заявку после ее сохранения. В ходе нашего расследования был предложен волшебник. Как вы думаете, будет ли лучше использовать это? Если да, есть ли хорошие ресурсы по его реализации в версии 8? frostymarvelous 06.04.2016
  • Если подумать, волшебник имеет большой смысл. Я тоже посмотрю, что найду сам. frostymarvelous 06.04.2016

buttonformsodoo-8openerp

Ответы

Ответ 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. Надеюсь, это поможет вам.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы