odoo15 看板视图不支持 one2many 字段

odoo15 kanban view doesn't support one2many field

lading_adapter_ids 是模块中的一个 one2many 字段。

这里是代码,全部t-out显示空白

 <t t-foreach="record.lading_adapter_ids.raw_value" t-as="o">
                                        <t t-out="o.name" />
                                         <t t-if="i % 2 != 0" >
                                            <hr />
                                        </t>
                                        <t t-set="i" t-value="1"/>
                                        <i class="fa fa-location-arrow" title="This is the district" />
                                        <t t-out="o.district" />
                                        <br />
                                        <i class="fa fa-building" title="This is company name" />
                                          <t t-out="o.display_name" />
                                        <br />
                                        <i class="fa fa-map-marker" title="This is the address" />
                                          <t t-out="o.eng_address" />
                                         <br />

                                     </t>

很遗憾,您不能使用这些字段。

构建包含模板中使用的格式化记录数据的对象的function,在one2many和[=16的情况下将raw_value设置为id列表=] 字段

来自看板视图文档:

Each field has two attributes value and raw_value, the former is formatted
according to current user parameters, the latter is the direct value from a read()
(except for date and datetime fields that are formatted according to user’s locale)

默认情况下,字段会被它们的格式化值替换,除非指定了 widget 属性,因此您可以定义一个新的小部件,例如 many2many_tags 来更改 One2many 字段的行为看板视图。

如果您查看 FieldMany2ManyTags class,您会看到一个特殊属性 fieldsToFetch 用于检索渲染上下文中使用的字段。

要定义一个新的小部件,kanban_address 基于 One2many 字段的值:

  • 您需要扩展 AbstractWidget
  • 设置要检索的字段
  • 定义新模板
  • 更改 _render 函数以呈现新创建的模板。
  • 最后,在看板视图的字段标签中使用新的小部件。

示例:

1- 看板小部件

/** @odoo-module **/
import field_registry from 'web.field_registry';
import AbstractField from 'web.AbstractField'
import  { qweb as QWeb, _t } from 'web.core';

var FieldKanbanAddress = AbstractField.extend({
    custom_template: "kanban_address",
    supportedFieldTypes: ['one2many', 'many2many'],
    fieldsToFetch: {
        name: {type: 'char'},
        district: {type: 'char'},
        display_name: {type: 'char'},
        eng_address: {type: 'char'},
    },

    _render: function () {
        var elements = this.value ? _.pluck(this.value.data, 'data') : [];
        this.$el.html(QWeb.render(this.custom_template, {elements: elements}));
    },
});

field_registry.add('kanban.kanban_address', FieldKanbanAddress);

2-自定义模板

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
    <t t-name="kanban_address">
        <t t-foreach="elements" t-as="o">
            
        </t>
    </t>
</templates>

3-widget属性

<field name="move_raw_ids" widget="kanban_address"/>  

4-在manifest

中指定JS和XML文件
'assets': {
    'web.assets_backend': [
        
        '{MODULE_NAME}/static/src/js/kanban_address.js',
    ],
    'web.assets_qweb': [
        '{MODULE_NAME}/static/src/xml/kanban_address.xml',
    ],
},