【问题标题】:creating new widget in odoo12 comunity在 odoo 12 社区中创建新的小部件
【发布时间】:2021-01-14 16:38:37
【问题描述】:

在 Odoo12ce 的一个自制模块中,有一些计算结果,我想编写自定义小部件,以便将此结果在小于 0 时显示为红色,大于 0 时显示为黑色。

模型中的变量:

result = fields.Float(string="Results", compute="calc_result")

在视图中:

<field name="result" widget="result_widget"/>

其中result_widget是前面提到的新小部件,如果你指导我编写模块,我真的很感激,因为我在互联网上找到的关于它的信息很差。

【问题讨论】:

    标签: python odoo odoo-12


    【解决方案1】:

    使用可能的装饰,一个非常简单的解决方案怎么样?

    <field name="result" decoration-danger="result < 0.0" />
    

    其他一些可能的装饰是:

    • 装饰-bf
    • 装饰-它
    • 装饰信息
    • 装饰静音
    • 装饰主要
    • 装修成功
    • 装饰警告

    IIRC 这些已更改为引导 text-decoration-* 类。

    【讨论】:

    • 有趣的解决方案,我不知道装饰类 :D,但编写自定义小部件对我很有帮助,因为我也想使用它作为编写更复杂的起点小部件。
    • 然后看看一些不错的例子,比如 OCA web_widget* modules ;-)
    【解决方案2】:

    为了能够创建一个小部件,您需要了解 Javascript 继承在 Odoo 中的工作原理,这在 Official Documentation 中有清楚的解释。

    我将举一个例子说明如何继续创建新的小部件字段:

    1. 创建一个文件 my_module/static/src/js/widget/result_field.js 到该文件中放置代码:

      odoo.define('my_module.result_field', function(require) { "use strict"; var BasicFields= require('web.basic_fields'); var FieldFloat = BasicFields.NumericField; var ResultFieldFloat; ResultFieldFloat= FieldFloat.extend({ /* NOW You are able to do as you wish*/ _renderEdit: function () { // Override this function to modify your field editing }, _renderReadonly: function () { // Override this function to modify your field on readonly mode }, }); // This is the name of your new widget field extending the Native Odoo NumericField Registry.add('my_result_widget', ResultFieldFloat); return { ResultFieldFloat: ResultFieldFloat, }; });
    2. 创建一个文件my_module/views/my_module_view.xml

          <odoo>
              <data>
                  <record id="my_module_view_form" model="ir.ui.view">
                       <field name="model">mymodule.model</field>
                       <field name="arch" type="XML">
                             <form string="Mymodule Form"> 
                                    <sheet>
                                       <field name="result" widget="my_result_widget" />
                                    </sheet>
                             </form>
                       </field>
                  </record>
                  <template id="my_module_fields_tpl" name="my_module_name assets" inherit_id="web.assets_backend">
                          <xpath expr="." position="inside">
                              <script type="text/javascript" src="/my_module/static/src/js/widget/result_field.js" />
                          </xpath>
                  </template>
              </data>
           </odoo>
      
    3. 然后在你的数据清单里面添加你的新视图文件。

    【讨论】:

    • 非常感谢,我终于用你的代码和我找到的其他 sn-ps 搞定了。
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多