【零散技术】Odoo 服务台(helpdesk)Qweb设计模式

15 篇文章 0 订阅
11 篇文章 1 订阅

序言:时间是我们最宝贵的财富,珍惜手上的每个时分

目录

一.缘起

二.心落

三.纷扰

四:忖量

五:已矣


 一.缘起

         近期有一个基于 Odoo服务台(helpdesk)的项目开发,web端显示的原始需求很简单:

增加一些字段,并填入表单内。效果图如下

看似如此简单的一个前段修改,却隐藏了不少坑。

二.心落

 按往常修改网页的套路,我找到了 helpdesk 的xml文件,并通过继承对进行修改:

<?xml version="1.0" encoding="utf-8"?>
<odoo>

    <template id="ticket_submit_form" inherit_id="website_helpdesk_form.ticket_submit_form">
        <xpath expr="//div[@class='container']" position="replace">

但是刷新后控制台竟然无任何效果,这让我怀疑是否是 xpath写错了,于是直接修改原始模块文件,升级模块后界面显示巍然不动,真的是个奇异事件。

三.纷扰

 气急败坏下,我卸载了模块,然后重新安装helpdesk,“奇迹”发生了:我打的 ???出现了!

但是我依旧很懵,重新安装模块后可以看到修改,但是我继续修改qweb,页面又不变化了

四:忖量

        这种情况下想要做到心如止水谈何容易,在我崩溃边缘的时候,突然想到是否是初始化的时候使用了 hooks 或者其他的方法,所以只会依据qweb初始化一次?

        顺着这个思路,我翻看了helpdesk下的py文件,终于发现了问题:


    @api.model_create_multi
    def create(self, vals_list):
        teams = super(HelpdeskTeam, self).create(vals_list)
        teams.filtered('use_website_helpdesk_form')._ensure_submit_form_view()
        return teams

    def write(self, vals):
        if 'use_website_helpdesk_form' in vals and vals['use_website_helpdesk_form']:
            self._ensure_submit_form_view()
        return super(HelpdeskTeam, self).write(vals)

    def unlink(self):
        teams_with_submit_form = self.filtered(lambda t: t.website_form_view_id is not False)
        for team in teams_with_submit_form:
            team.website_form_view_id.unlink()
        return super(HelpdeskTeam, self).unlink()

    def _ensure_submit_form_view(self):
        for team in self:
            if not team.website_form_view_id:
                default_form = etree.fromstring(self.env.ref('website_helpdesk_form.ticket_submit_form').arch)
                xmlid = 'website_helpdesk_form.team_form_' + str(team.id)
                form_template = self.env['ir.ui.view'].create({
                    'type': 'qweb',
                    'arch': etree.tostring(default_form),
                    'name': xmlid,
                    'key': xmlid
                })
                self.env['ir.model.data'].create({
                    'module': 'website_helpdesk_form',
                    'name': xmlid.split('.')[1],
                    'model': 'ir.ui.view',
                    'res_id': form_template.id,
                    'noupdate': True
                })

                team.write({'website_form_view_id': form_template.id})

每一个 helpdesk实例,都会依据xml模版创建一个qweb数据!!!!

所以无论怎么修改,已有的helpdesk web界面,都不会发生变化!!!

五:已矣

基于如上缘由,每次调试xml的时候,需要手动去web新建一个 helpdesk记录。下图就是我的冤种测试记录。

经过多次的调试,终于得到最终结果。

        虽说完成了工作,但是依旧无法理解这样做的用法。

        非要从代码层面解释,是可以在python里灵活的为服务台创建不同的web界面。

        但是 目前odoo15没有任何自定义的设置,也许这是个 future 且官方早有解释,但我才懒的翻github,就拭目以待吧!!!

 

odoo开发部署实施.

wx号: _ro_cd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值