如何创建一个打开弹出窗口的按钮,而无需自动注册/创建表单odoo13



我想创建一个按钮,打开一个弹出窗口,接管一些表单字段。这些字段可以修改/填写。关闭时,会更新相关字段。而无需在单击保存按钮之前保存或创建记录。我不知道如何做到这一点,因为我知道没有关系字段。我应该创建一个小部件,一个向导,两者。。。。请帮帮我。

这是我当前的代码:

testrongcale.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)

testrongcale.xml:

<?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>

testrongcale_configurator.xml:

<?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>

testrongcale_configurator.py:

# -*- 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的关系字段完成的,例如:-

在你的test.scale模型中,你的领域是weighing

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

test_scale_id = fields.Many2one(string="Test Scale")

之后,在主模型的xml文件中添加context,其中是这样打开向导的按钮。

<button name="%(test_scale_configurator_action)d"
type="action"
string="Weighing"
class="oe_highlight"
context="{'default_test_scale_id': active_id}"></button>

之后,此字段需要在向导的窗体中不可见,以便在向导中保存数据,以便以后可以引用它。

<field name="test_scale_id" invisible="1"/>

在你的巫师称重场里就这样。

weighing = fields.Integer(string='weighing', related='test_scale_id.weighing', readonly=False)

注意:这个过程,制作字段是一次过程

之后,您可以使用主模型中的任何字段,并且您希望在向导中使用这些字段,您可以通过test_scale_id.any_of_your_field获取这些字段。

最新更新