【问题标题】:Odoo custom field to kanban grouped stage columnOdoo 自定义字段到看板分组阶段列
【发布时间】:2020-12-14 14:22:29
【问题描述】:

我在模型 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 的分组看板列视图中显示该值。我请求您指导我实现这一目标,这对我非常有用,在此先感谢。

【问题讨论】:

    标签: odoo kanban


    【解决方案1】:

    首先,您需要将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>
    

    【讨论】:

    • 谢谢,Kenly,它可以工作......但这完全基于 hr.applicant 模型,如果我添加一个新列,它会返回空,当我将候选人拖到该列时,然后显示数据。 , 我们可以让它来自 hr.recruitment.stage 模型吗?所以即使列是空的它也会显示数据,我们可以这样做吗?如果是这样,请指导我。提前致谢。
    • 是的,当然它使用组中的第一条记录。这取决于data_records 对象,是的,即使组中没有记录,您也可以从stage_id 记录中获取招聘人员。检查我的编辑。
    • 非常感谢,Kenly,只需稍作修改即可使用,非常感谢....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多