在Odoo12ce的一个自制模块中,有一些计算结果,我想编写自定义小部件,以便在0以下时将此结果显示为红色,在0以上时显示为黑色。
模型中的变量:
result = fields.Float(string="Results", compute="calc_result")
并且在视图中:
<field name="result" widget="result_widget"/>
其中result_widget是前面提到的新小部件,如果你指导我写这个模块,我真的很感激,因为我在互联网上发现的关于它的信息很差。
使用可能的装饰来获得一个非常简单的解决方案怎么样?
<field name="result" decoration-danger="result < 0.0" />
其他一些可能的装饰是:
- 装修bf
- 装饰它
- 装饰信息
- 装饰静音
- 装饰初级
- 装修成功
- 装饰警告
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_module/views/my_modul_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>
-
然后在数据的清单中添加新的视图文件。