【问题标题】:How to save form data using a custom button in Openerp/Odoo如何使用 Openerp/Odoo 中的自定义按钮保存表单数据
【发布时间】:2016-07-25 12:18:40
【问题描述】:

我们有一个带有字段的表单。我们添加了自己的“保存”按钮,并希望在单击此按钮时将表单上的数据持久保存到服务器。

我们知道如何在服务器上创建操作来处理按钮点击,但不知道如何检索表单数据。

目前,我们正在使用内置的保存按钮,但需要触发一些额外的功能因此请求。

这就是我们的 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>

【问题讨论】:

  • 在现有的“保存”功能中添加额外的功能,而不是添加新的替代功能不是更好吗?
  • 我们现在才做 odoo 5 天。可悲的是,文档不是太好。如果您能向我们展示如何或为我们指明正确的方向,我们将不胜感激。
  • 所以我只是查了一下,这对我们不起作用。基本上,我们有一个对话框,需要在保存按钮后关闭对话框。覆盖保存函数需要我们返回 true 或 false,因此我们无法返回关闭窗口的操作。
  • 那么它是一个巫师吗?并且您想存储您在向导中完成的内容?
  • @dccdany 单击按钮关闭工单后,我们会打开一个对话框,要求您输入解决方案。在对话框中,我们只向您显示保存后更新票证的原因对话框。在我们调查期间,有人建议使用巫师。你认为使用它会更好吗?如果是这样,有什么好的资源可以在 v8 中实现它吗?

标签: forms button openerp odoo-8


【解决方案1】:

这里有一个可以帮助你的小例子。首先,您需要向按钮添加一些模型操作,如下所示:

<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 之前保存在数据库中。 希望对您有所帮助。

【讨论】:

  • 完美!我不知道我可以使用 self 来检索值。优秀!再次感谢。
  • api.model 对我来说失败了,但 api.one 有效。错误是关于无法转换为序列。
  • @frostymarvelous 哦,对不起。这是因为我使用的是 v.9。 api.one - 在 odoo 9 中已弃用。
  • 好的。尝试使用 9,但由于可用的文档主要针对 8,因此将问题恢复为 8。
猜你喜欢
  • 2017-10-30
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多