序言:时间是我们最宝贵的财富,珍惜手上的每个时分
目录
一.缘起
近期有一个基于 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