Button 如何创建在不自动注册/创建表单odoo13的情况下打开弹出窗口的按钮

Button 如何创建在不自动注册/创建表单odoo13的情况下打开弹出窗口的按钮,button,widget,odoo,wizard,autosave,Button,Widget,Odoo,Wizard,Autosave,我想创建一个按钮,打开一个弹出窗口,接管一些表单字段。 这些字段可以修改/填写。 关闭时,相关字段将更新。 在单击“保存”按钮之前,不保存或创建记录。 我不知道如何在知道没有关系字段的情况下到达那里。 我应该创建一个小部件,一个向导,两者都。。。。 请帮帮我 这是我目前的代码: test\u scale.py: # -*- coding: utf-8 -*- from odoo import models, fields, api class TestScale(models.Model):

我想创建一个按钮,打开一个弹出窗口,接管一些表单字段。 这些字段可以修改/填写。 关闭时,相关字段将更新。 在单击“保存”按钮之前,不保存或创建记录。 我不知道如何在知道没有关系字段的情况下到达那里。 我应该创建一个小部件,一个向导,两者都。。。。 请帮帮我

这是我目前的代码:

test\u scale.py:

# -*- coding: utf-8 -*-
from odoo import models, fields, api


class TestScale(models.Model):
    _name = 'test.scale'

    name = fields.Char(required=True)
    weighing = fields.Integer('weighing', default=0)
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <record id="test_scale_tree_view" model="ir.ui.view">
        <field name="name">test.scale.tree</field>
        <field name="model">test.scale</field>
        <field name="arch" type="xml">
            <tree string="Test scale">
                <field name="name"></field>
                <field name="weighing"></field>
            </tree>
        </field>
    </record>

    <record id="test_scale_form_view" model="ir.ui.view">
        <field name="name">test.scale.form</field>
        <field name="model">test.scale</field>
        <field name="arch" type="xml">
            <form string="Test scale">
                <sheet>
                    <group name="main_info">
                        <field name="name"></field>
                        <field name="weighing"></field>
                        <button name="%(test_scale_configurator_action)d"
                                type="action"
                                string="Weighing"
                                class="oe_highlight"
                                context="{'weighing': weighing}"></button>
                    </group>
                </sheet>
            </form>
        </field>
    </record>


    <record id="saisie_menu_action" model="ir.actions.act_window">
        <field name="name">Test_scale</field>
        <field name="res_model">test.scale</field>
        <field name="type">ir.actions.act_window</field>
        <field name="view_mode">tree,form</field>
        <field name="help" type="html">
            <p class="oe_view_nocontent_create">Aucun enregistrement
            </p>
        </field>
    </record>


    <menuitem id="test_scale_menu"
              name="Test_scale"/>

    <menuitem id="test_scale_saisie_menu"
              parent="test_scale_menu"
              name="Saisie"
              action="saisie_menu_action"/>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="test_scale_configurator_view_form" model="ir.ui.view">
        <field name="name">test.scale.configurator.view.form</field>
        <field name="model">test.scale.configurator</field>
        <field name="arch" type="xml">
            <form>
                <field name="weighing"/>
                <footer>
                    <button type="object"
                            name="button_save"
                            string="Save"
                    />
                    <button special="cancel"
                            string="Cancel"
                            class="btn-secondary"/>
                </footer>
            </form>
        </field>
    </record>

    <record id="test_scale_configurator_action" model="ir.actions.act_window">
        <field name="name">Test Scale</field>
        <field name="res_model">test.scale.configurator</field>
        <field name="view_mode">form</field>
        <field name="target">new</field>
        <field name="view_id" ref="test_scale_configurator_view_form"/>
    </record>
</odoo>
# -*- coding: utf-8 -*-

from odoo import models, fields


class TestScaleConfigurator(models.TransientModel):
    _name = 'test.scale.configurator'

    weighing = fields.Integer(string='weighing')

    def button_save(self):
        self.ensure_one()
        return True
test\u scale.xml:

# -*- coding: utf-8 -*-
from odoo import models, fields, api


class TestScale(models.Model):
    _name = 'test.scale'

    name = fields.Char(required=True)
    weighing = fields.Integer('weighing', default=0)
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
    <record id="test_scale_tree_view" model="ir.ui.view">
        <field name="name">test.scale.tree</field>
        <field name="model">test.scale</field>
        <field name="arch" type="xml">
            <tree string="Test scale">
                <field name="name"></field>
                <field name="weighing"></field>
            </tree>
        </field>
    </record>

    <record id="test_scale_form_view" model="ir.ui.view">
        <field name="name">test.scale.form</field>
        <field name="model">test.scale</field>
        <field name="arch" type="xml">
            <form string="Test scale">
                <sheet>
                    <group name="main_info">
                        <field name="name"></field>
                        <field name="weighing"></field>
                        <button name="%(test_scale_configurator_action)d"
                                type="action"
                                string="Weighing"
                                class="oe_highlight"
                                context="{'weighing': weighing}"></button>
                    </group>
                </sheet>
            </form>
        </field>
    </record>


    <record id="saisie_menu_action" model="ir.actions.act_window">
        <field name="name">Test_scale</field>
        <field name="res_model">test.scale</field>
        <field name="type">ir.actions.act_window</field>
        <field name="view_mode">tree,form</field>
        <field name="help" type="html">
            <p class="oe_view_nocontent_create">Aucun enregistrement
            </p>
        </field>
    </record>


    <menuitem id="test_scale_menu"
              name="Test_scale"/>

    <menuitem id="test_scale_saisie_menu"
              parent="test_scale_menu"
              name="Saisie"
              action="saisie_menu_action"/>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="test_scale_configurator_view_form" model="ir.ui.view">
        <field name="name">test.scale.configurator.view.form</field>
        <field name="model">test.scale.configurator</field>
        <field name="arch" type="xml">
            <form>
                <field name="weighing"/>
                <footer>
                    <button type="object"
                            name="button_save"
                            string="Save"
                    />
                    <button special="cancel"
                            string="Cancel"
                            class="btn-secondary"/>
                </footer>
            </form>
        </field>
    </record>

    <record id="test_scale_configurator_action" model="ir.actions.act_window">
        <field name="name">Test Scale</field>
        <field name="res_model">test.scale.configurator</field>
        <field name="view_mode">form</field>
        <field name="target">new</field>
        <field name="view_id" ref="test_scale_configurator_view_form"/>
    </record>
</odoo>
# -*- coding: utf-8 -*-

from odoo import models, fields


class TestScaleConfigurator(models.TransientModel):
    _name = 'test.scale.configurator'

    weighing = fields.Integer(string='weighing')

    def button_save(self):
        self.ensure_one()
        return True

这是由odoo的关系字段完成的,例如:-

在您的
测试称重
模型中,您的字段是
称重

首先,您需要在向导中配置当前模型
测试.scale
的id,以便您可以引用它,就像这样,您可以在向导中添加字段

test_scale_id = fields.Many2one(string="Test Scale")
在此之后,在主模型的xml文件中添加
上下文
,其中是打开向导的按钮,如下所示

<button name="%(test_scale_configurator_action)d"
                            type="action"
                            string="Weighing"
                            class="oe_highlight"
                            context="{'default_test_scale_id': active_id}"></button>
weighing = fields.Integer(string='weighing', related='test_scale_id.weighing', readonly=False)
注意:此过程,制作字段为一次性过程。


之后,您可以使用主模型中的任何字段,并且您希望在向导中使用这些字段,您可以通过
test\u scale\u id获取这些字段-

在您的
测试称重
模型中,您的字段是
称重

首先,您需要在向导中配置当前模型
测试.scale
的id,以便您可以引用它,就像这样,您可以在向导中添加字段

test_scale_id = fields.Many2one(string="Test Scale")
在此之后,在主模型的xml文件中添加
上下文
,其中是打开向导的按钮,如下所示

<button name="%(test_scale_configurator_action)d"
                            type="action"
                            string="Weighing"
                            class="oe_highlight"
                            context="{'default_test_scale_id': active_id}"></button>
weighing = fields.Integer(string='weighing', related='test_scale_id.weighing', readonly=False)
注意:此过程,制作字段为一次性过程。


之后,您可以使用主模型中的任何字段,并且您希望在向导中使用这些字段,您可以通过
测试\u scale\u id获取这些字段。谢谢你的回答。我已经做了你提议的改变。但是,当我单击打开向导的按钮时,表单会自动保存,尽管用户尚未单击保存。我希望表单仅在用户单击“保存”时保存。确定,因此在向导文件中添加readonly=False,我正在编辑我的答案,请检查。确定。通过单击一个按钮来调用向导,该按钮会自动保存我的表单,就像我单击了保存一样。但我不想在单击“称重”按钮时保存我的表单。即使经过你的修改,它也能做到。我必须通过小部件吗?如果是这样,我如何将小部件按钮连接到我的formulair.xml,以及这个小部件按钮如何调用python方法?您好。谢谢你的回答。我已经做了你提议的改变。但是,当我单击打开向导的按钮时,表单会自动保存,尽管用户尚未单击保存。我希望表单仅在用户单击“保存”时保存。确定,因此在向导文件中添加readonly=False,我正在编辑我的答案,请检查。确定。通过单击一个按钮来调用向导,该按钮会自动保存我的表单,就像我单击了保存一样。但我不想在单击“称重”按钮时保存我的表单。即使经过你的修改,它也能做到。我必须通过小部件吗?如果是这样,我如何将小部件按钮连接到formulair.xml,这个小部件按钮如何调用python方法?