odoo开发笔记--向导弹窗的selection选项,根据条件动态显示

场景描述:

odoo日常开发中,我们可能会遇到这种业务需求情况,在当前form界面,弹出窗口,根据form表单的某个值,传递上下文,

弹出窗口中的选择字段框,根据上下文,显示不同的选项。

说明: 基于odoo10版本

需求样例说明:

点击“测试选择”按钮:

因为上一个界面,录的值是“北京”,因此弹出的窗口中下啦选项只有“001-北京”。 

如果录入的是“所有”,则下拉框显示全部选项。

主要逻辑代码,通过自定义odoo widget挂件来实现。

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <record id="selection_test_wizard_action" model="ir.actions.act_window">
            <field name="name">测试选择</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">test_app.test_select_wizard</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
            <field name="target">new</field>
        </record>

        <record id="selection_test_wizard_form" model="ir.ui.view">
            <field name="name">测试选择FORM</field>
            <field name="model">test_app.test_select_wizard</field>
            <field name="arch" type="xml">
                <form create="false" edit="true">
                    <group>
                        <group>
                            <field name="name" invisible="1"/>
                            <field string="城市" name="two_step"  widget="my_dynamic_selection"/>
                            <field string="温度" name="tmp"/>
                        </group>
                    </group>
                    <footer>
                        <button string="确认" name="select_confirm" class="oe_highlight" type="object"/>
                        <button string="取消" class="btn-default" special="cancel"/>
                    </footer>
                </form>
            </field>
        </record>
    </data>
</odoo>
odoo.define('my_selection', function (require) {
    "use strict";

    let core = require('web.core');
    let FieldSelection = core.form_widget_registry.get('selection');
    console.log('080808080808080808080880');

    var MySelection = FieldSelection.extend({
        events: {
            'focus': function() {
            console.log('909090909090909090909');

        var field_value = this.field_manager.fields['name'].get_value();
        console.log(field_value);

        if (field_value == '北京')
            {
            this.$el.find('option')[2].style.display="none";
            this.$el.find('option')[3].style.display="none";
            }
        else if (field_value == '上海')
            {
                this.$el.find('option')[1].style.display="none";
                this.$el.find('option')[3].style.display="none";
            }
        else if (field_value == '广州')
            {
                this.$el.find('option')[1].style.display="none";
                this.$el.find('option')[2].style.display="none";
            }
        else if (field_value == '所有')
            {

            }
        }
        },
});
    core.form_widget_registry.add('my_dynamic_selection', MySelection);
});

模块代码下载地址:test_app.zip

 

参考:

https://www.php.cn/js-tutorial-487462.html

https://python.tutorialink.com/odoo-hide-some-options-in-field-selection/

 

posted @ 2022-06-17 17:42  hello-Jesson  阅读(1295)  评论(0编辑  收藏  举报