首页 > 解决方案 > Odoo 自定义字段到看板分组阶段列

问题描述

我在模型 hr.recruitment.stage 中添加了一个新的自定义字段(many2many),请参考下图, 在此处输入图像描述

并尝试在 hr.applicant 的分组看板列视图中显示它,请参考下图 在此处输入图像描述

在这里,我通过在路径 static/src/xml/filename.xml 中编写自定义插件添加了字幕文本

<?xml version="1.0"?>
<templates>
    <t t-inherit="web.KanbanView.Group" t-inherit-mode="primary">
        <xpath expr="//div[hasclass('o_kanban_header_title')]" position="after">
            <span>Subtitle</span>
        </xpath>
    </t>
</templates>

在字幕的地方,我想显示来自 hr.recruitment.stage 模型的新添加的 many2many 字段值,这里我提到了 kanban_column.js 并且我无法弄清楚如何传递新添加的值字段(many2many)到 javascript 并在 hr.applicant 的分组看板列视图中显示值。我请求您指导我实现这一目标,这对我非常有用,在此先感谢。

标签: odookanban

解决方案


首先,您需要将该x_recruiters字段添加到看板字段:

<record id="hr_kanban_view_applicant" model="ir.ui.view">
    <field name="name">hr.kanban.view.applicant</field>
    <field name="model">hr.applicant</field>
    <field name="inherit_id" ref="hr_recruitment.hr_kanban_view_applicant"/>
    <field name="arch" type="xml">
        <progressbar position="before">
            <field name="x_recruiters"/>
        </progressbar>
    </field>
</record>  

它将自动读取该x_recruiters字段并将其添加到data对象中。

然后添加recruiters名称而不是Subtitle文本:

<t t-if="widget.data_records.length != 0">
    <t t-foreach="widget.data_records[0].data.x_recruiters.data" t-as="stage">
        <span t-esc="stage.data.display_name"/>
        <br/>
    </t>
</t>

编辑:

您可以更改看板列以从舞台模型中读取招聘人员并在渲染后显示他们。

odoo.define('kanban_group_extended.KanbanColumn', function (require) {
    "use strict";
    var KanbanColumn = require('web.KanbanColumn');

    KanbanColumn.include({
        renderElement: function () {
           this._super();
           this.set_recruiters();
        },
        set_recruiters: function() {
            var self = this;
            var kanban_header_title = self.$('.o_kanban_header_title');
            this._rpc({
                model: self.relation,
                method: 'read',
                args: [[self.id], ["x_recruiters"]],
            }).then(function (records) {
                return self._rpc({
                        model: self.data.fields["x_recruiters"].relation,
                        method: 'read',
                        args: [records[0]["x_recruiters"], ['display_name']],
                    }).then(function (values) {
                        _.each(values, function (value) {
                            kanban_header_title.after("<span>" + value['display_name'] + "</span><br/>");
                        });
                    });
            });
        },
    });
});

将 js 文件添加到资产后端:

<template id="assets_backend" inherit_id="web.assets_backend" name="Kanban Backend Assets">
    <xpath expr="//link[last()]" position="after">
        <script type="text/javascript" src="/kanban_group_extended/static/src/js/KanbanColumn.js"></script>
    </xpath>
</template>

推荐阅读