ODOO18菜鸟二次开发系列(5)-修改默认视图以及默认搜索

前言

原打算将联系人公司用户与个人用户分开两个菜单按钮,由于折腾半天没搞清楚如何base.view_partner_form运行机制,同时发现筛选功能非常好用,定义筛选视图即可非常好的解决分类问题。同时新增的timeline视图需要在项目管理中作为默认视图以提高效率,因此先研究修改默认视图以及默认搜索。


一、本章目标

由上图修改为下图。
在这里插入图片描述
改为点击项目自动默显示timeline甘特图
在这里插入图片描述

二、修改默认视图

1.修改view mode 顺序

方法一:easy 模式,在需要修改的页码点debug的动作,最底下有顺序。
在这里插入图片描述
在这里插入图片描述
直接拖动修改
方案二:hard模式:在view文件内改。

<!--   XD20250411激活窗口添加timeline按钮,为了让timeline显示子任务domain删除原('display_in_project', '=', True)限制,由具体视图自行判断 -->
    <record id="project.act_project_project_2_project_task_all" model="ir.actions.act_window">
        <field   name="view_mode">timeline,kanban,list,form,calendar,pivot,graph,activity</field>
        <field name="domain">[('project_id', '=', active_id)]</field>

然后修改sequence值

代码如下(示例):

        <record id="project.project_task_kanban_action_view" model="ir.actions.act_window.view">
            <!-- 将 sequence 字段的值从原来的 10 修改为 21 -->
            <field name="sequence" eval="21"/>
            <!-- 注意:这里不需要写其他字段,Odoo 会自动合并修改 -->
        </record>
    <!-- 为 act_project_project_2_project_task_all 动作定义 Timeline 视图的顺序 -->
    <record id="project_task_timeline_action_view" model="ir.actions.act_window.view">
        <!-- 设置顺序为 10,使其排在前面 -->
        <field name="sequence" eval="10"/>
        <!-- 指定视图模式为 timeline -->
        <field name="view_mode">timeline</field>
        <!-- 关联到目标窗口动作 -->
        <field name="act_window_id" ref="project.act_project_project_2_project_task_all"/>
    </record>

该处使用的url网络请求的数据。


三、修改视图的默认搜索

1.修改默认分组

打开开发者模式,点击视图xml结构,
在这里插入图片描述
搜索表头比较特殊的代码,基本能一次性找到 在这里插入图片描述

修改这里的default group by 可以单独影响 kanban的分组

        <record model="ir.ui.view" id="view_task_kanban">
            <field name="name">project.task.kanban</field>
            <field name="model">project.task</field>
            <field name="arch" type="xml">
                <kanban
                    highlight_color="color"
                    default_group_by="stage_id"

继续修改list的默认分组,xml找到default_order="priority desc, sequence, state, date_deadline asc, id desc
在这里插入图片描述
全部源代码搜到三处,判断就是这段。但并没有js_class=“project_task_list” default_group_by=“stage_id”,

        <record id="project_task_view_tree_main_base" model="ir.ui.view">
            <field name="name">project.task.view.list.main.base</field>
            <field name="model">project.task</field>
            <field name="arch" type="xml">
                <list string="Tasks" sample="1" default_order="priority desc, sequence, state, date_deadline asc, id desc">
                    <field name="sequence" readonly="1" column_invisible="True"/>
                    <field name="allow_milestones" column_invisible="True"/>
                    <field name="subtask_count" column_invisible="True"/>
                    <field name="closed_subtask_count" column_invisible="True"/>
                    <field name="id" optional="hide" options="{'enable_formatting': False}"/>
                    <field name="priority" widget="priority" nolabel="1" width="20px"/>
                    <field name="state" widget="project_task_state_selection" nolabel="1" width="20px" options="{'is_toggle_mode': false}"/>
                    <field name="name" string="Title" widget="name_with_subtask_count"/>
                    <field name="project_id" widget="project" optional="show" options="{'no_open': 1}" readonly="1" column_invisible="context.get('default_project_id')"/>
                    <field name="milestone_id" invisible="not allow_milestones" context="{'default_project_id': project_id}" groups="project.group_project_milestone" optional="hide"/>
                    <field name="partner_id" optional="hide" widget="res_partner_many2one" invisible="not project_id" options="{'no_open': True}"/>
                    <field name="user_ids" optional="show" widget="many2many_avatar_user"/>
                    <field name="company_id" groups="base.group_multi_company" optional="show" column_invisible="context.get('default_project_id')" options="{'no_create': True}"/>
                    <field name="company_id" column_invisible="True"/>
                    <field name="date_deadline" optional="hide" widget="remaining_days" invisible="state in ['1_done', '1_canceled']"/>
                    <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}" optional="show" context="{'project_id': project_id}"/>
                    <field name="date_last_stage_update" optional="hide"/>
                    <field name="stage_id" column_invisible="context.get('set_visible', False)" optional="show"/>
                </list>
            </field>
        </record>

考虑是继承修改,查看在这里插入图片描述
在这里插入图片描述
找到对应继承

        <record id="view_task_tree2" model="ir.ui.view">
            <field name="name">project.task.list</field>
            <field name="model">project.task</field>
            <field name="inherit_id" ref="project_task_view_tree_base"/>
            <field name="mode">primary</field>
            <field name="priority">2</field>
            <field name="arch" type="xml">
                <list position="attributes">
                    <attribute name="js_class">project_task_list</attribute>
                    <attribute name="default_group_by">stage_id</attribute>
                </list>
            </field>
        </record>

修改此地default_group_by值

2.修改默认筛选

在这里插入图片描述
debug的动作有domain设置,可以加入[(‘is_company’, ‘=’, True)]等过滤条件。问题是操作员无法撤销。另外可以直接搜索菜单设置默认搜索,比较简单请各位自行研究。

3.取消浏览器输入框自动填充(20250426更新)

在点击搜索input框时,浏览器默认会弹出“保存信息”进行自动填充。如下图
在这里插入图片描述
这样会遮挡筛选器,影响使用。
在我们的引用了web模块的自定义视图内增加以下内容将autocomplete设置为off解决此问题:

    <templates xml:space="preserve">
        <t t-name="custom_crm.SearchBar.Input" t-inherit="web.SearchBar.Input" t-inherit-mode="extension">
            <xpath expr="//input" position="attributes">
                <attribute name="autocomplete">off</attribute>
            </xpath>
        </t>
    </templates>

总结

`
本章主要介绍 Odoo 项目视图修改方法。修改默认视图可通过页面调试拖动或修改 view 文件调整 view mode 顺序;修改视图默认搜索则需在开发者模式下,找到对应视图 XML 代码,修改默认分组相关字段来实现。将autocomplete设置为off解决遮挡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值