Python 在odoo12 comunity中创建新小部件

Python 在odoo12 comunity中创建新小部件,python,odoo,odoo-12,Python,Odoo,Odoo 12,在Odoo12ce中的一个自制模块中,有一些计算结果,我想编写自定义小部件,以便在结果小于0且黑色大于0时将其显示为红色 模型中的变量: result = fields.Float(string="Results", compute="calc_result") 并且认为: <field name="result" widget="result_widget"/> 如果result_widget是

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

模型中的变量:

result = fields.Float(string="Results", compute="calc_result")
并且认为:

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


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

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


其他一些可能的装饰包括:

  • 装饰高炉
  • 装饰它
  • 装修信息
  • 装饰静音
  • 装饰初级
  • 装修成功
  • 装修警告

IIRC这些将更改为引导文本装饰-*类。

要创建小部件,您需要了解Javascript继承在Odoo中的工作方式,这在中有明确的解释

我将给您一个如何继续创建新窗口小部件字段的示例:

  • 创建一个文件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,
          };
    });
    
  • 创建一个文件my\u module/views/my\u module\u view.xml

    
    mymodule.model
    
  • 然后在数据内部的清单中添加新的视图文件


  • 有趣的解决方案,我不知道装饰类:D,但编写自定义小部件对我来说非常有帮助,因为我想把它作为编写更复杂小部件的起点。然后看看一些很好的例子,比如OCA;-)非常感谢你,我终于用你的代码和我找到的其他代码片段搞定了它。
        <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>