无聊小计
前言
在odoo16中,m2o字段,被选择的时候,默认是展示其display_name,但是在很多时候,display_name有很多相似性,不能快速区别,到底选择那一条数据,所以在我无聊之下,研究了一下m2o的展示方式。顺便做了一下测试的展示方式
实现
研读了odoo16代码之后,m2o的下拉框,是用ul标签展示的,每一条记录使用li标签展示,因为可以从这里入手,
<ul class="o-autocomplete--dropdown-menu dropdown-menu ui-widget ui-autocomplete show" t-on-mousedown.prevent="" t-ref="sourcesList">
<t t-foreach="sources" t-as="source" t-key="source.id">
<t t-if="source.isLoading">
<li class="o-autocomplete--dropdown-item ui-menu-item">
<a href="#" class="dropdown-item ui-menu-item-wrapper">
<i class="fa fa-spin fa-circle-o-notch" /> <t t-esc="source.placeholder" />
</a>
</li>
</t>
<t t-else="">
<t t-foreach="source.options" t-as="option" t-key="option.id">
<li
class="o-autocomplete--dropdown-item ui-menu-item"
t-att-class="option.classList"
t-on-mouseenter="() => this.onOptionMouseEnter([source_index, option_index])"
t-on-mouseleave="() => this.onOptionMouseLeave([source_index, option_index])"
t-on-click="() => this.onOptionClick([source_index, option_index])"
>
以上代码仅仅是部分,只是展示一下,
那么可以将其改成表格形式展开,那么就更直观了
下拉的时候,展示原m2o字段的几个列,然后展示相应的数据,
其中需要修改的代码部分在autocomplete.js autocomplete.xml relational_utils.js里,后端也需要更改