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',
],
},
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',
],
},