如何在 Odoo 16 中创建名称搜索功能

news2024/9/27 17:34:20

我们精通 Odoo,了解如何使用关系字段来建立不同模型之间的联系。为了填充这些关系字段,我们经常需要从一整套可用记录中搜索并找到特定值。Odoo 的名称搜索功能简化了此搜索过程,提供了一种根据我们的特定需求自定义搜索的便捷方式。

深入探讨名称搜索功能并深入探讨其各种用例。

Odoo 16中的名称搜索功能用于搜索模型中通过关系字段链接的记录。可以使用部分值或记录默认“名称”字段以外的字段进行此搜索。默认情况下,在 Many2one 字段中,您可以通过键入名称来搜索和选择记录。但是,如果您希望使用不同的参数或条件进行搜索,则可以利用 name_search 函数来实现此级别的自定义。

让我们看一个 Odoo 示例。当在新的销售订单报价单或发票的客户字段中输入客户姓名时,可以从以前的记录中进行搜索。

此外,当我们输入联系人的电子邮件 ID 时,可以搜索该特定记录,如下例所示。 

 

您可能还会注意到,我们可以使用部分电子邮件地址或姓名进行搜索。要获取此属性,请使用姓名搜索功能。

下面看一下名称搜索函数的定义。

@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
   # code
   return self._search(expression.AND([domain, args]), limit=limit,   access_rights_uid=name_get_uid)

* name (str) - 与名称匹配的模式。

* args(列表) ——用于搜索以指示附加限制的可选域。

* operator (str):匹配名称的域运算符,如“like”、“ilike”、“=”等等

* 限制(int):此选项允许您指定最多返回多少条记录。

* name_get_uid — 限制用户或指定用户。

假设我们需要在销售订单中包含电话号码来查找消费者。为此,我们必须继承该模型并在“res.partner”中定义一个名称搜索函数。

class ResPartner(models.Model):
   _inherit = 'res.partner'
   @api.model
   def _name_search(self, name='', args=None, operator='ilike', limit=100, name_get_uid=None):
       args = list(args or [])
       if name:
           args += ['|', '|', ('name', operator, name), ('email', operator, name),
                    ('phone', operator, name)]
           return self._search(args, limit=limit, access_rights_uid=name_get_uid)

 

‘args’ 的默认值设置为 None。要自定义名称搜索函数的条件,我们可以指定一个域并将‘args’列表合并到函数中。

现在,也可以使用电话号码搜索联系人。

 

 

您可以在域内提供多个选项,并对 Many2one 字段使用点('.')运算符。

例如,如果您希望包含使用州名称进行搜索的选项,则可以通过在 Many2one 字段“state_id”上调用点运算符作为“state_id.name”来访问它。因此,“args”列表如下:

args += ['|', '|', '|', ('name', 操作员, name), ('phone', 操作员, name), ('email', 操作员, name), ('state_id.name', 操作员, name)]

让我们探索“res.city”模型中名称搜索功能的另一个示例。“res.city”使用 name_get 函数,将邮政编码合并到其显示名称中。因此,当 Many2one 字段与此模型关联并启动搜索时,将显示一个包含其增强显示名称(包括邮政编码)的列表。

 

class ResCity(models.Model):
   _name = 'res.city'
   _description = 'City'
   _order = 'name'
   name = fields.Char(string="Name", help='Name of city', required=True,
                      translate=True)
   zipcode = fields.Char(string="Zip", help='Zip of city')
   country_id = fields.Many2one('res.country', string='Country',
                                help='Country to which the city belongs to',
                                required=True)
   state_id = fields.Many2one('res.country.state', string='State',
                              help='State to which the city belongs to',
                              domain="[('country_id', '=', country_id)]")
   def name_get(self):
       res = []
       for city in self:
           name = city.name if not city.zipcode else '%s (%s)' % (
           city.name, city.zipcode)
           res.append((city.id, name))
       return res
   @api.model
   def _name_search(self, name='', args=None, operator='ilike', limit=100,
                    name_get_uid=None):
       args = list(args or [])
       if not (name == '' and operator == 'ilike'):
           args += ['|', (self._rec_name, operator, name),
                    ('zipcode', operator, name)]
       return self._search(args, limit=limit, access_rights_uid=name_get_uid)

 

但是,使用邮政编码在记录中进行搜索是通过模型中定义的 name_search 函数实现的。您还可以观察到,在 name_search 函数中,我们使用了“self._rec_name”,并实现了“if”条件,以使用空字符串优化默认条件“ilike”,该条件与所有内容匹配。

事实上,同样地,我们可以自定义和定义Odoo中的name_search函数,以方便根据关系字段中的字段值搜索特定记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1909591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像识别和目标检测在超市电子秤上的应用

目录 前言深度学习的目标检测图像识别技术视觉秤的优势其他应用场景中的技术应用未来展望 前言 随着科技的不断发展,电子秤在生鲜超市中的应用也在不断升级。传统的电子秤需要打秤人员手动输入秤码,这不仅耗时费力,还需要大量的培训以记住各…

WMS海外仓系统应用:如何改善海外仓的12个核心业务流程

现代化跨境电商的发展依赖海外仓的高效运转,从货物入仓到订单拣货再到最后的货物出库,全部流程都需要海外仓可以顺畅应对。 作为海外仓,则需要借助诸如WMS海外仓系统这样的智能化管理方式,才能适应日益复杂的客户需求。今天我们就…

数据融合工具(4)正方形矩形图幅分幅计算

一、需求背景 对于工程方面需要的局部地区的大比例尺地形图、平面图和中小比例尺挂图和地图集,常使用矩形分幅。 二、矩形分幅 矩形分幅是按平面直接坐标系的横纵坐标线来划分的,图幅的上、下以坐标横轴为界,左、右以坐标纵轴为界。 供各种工…

KIVY ScreenManager 使用案例常见错误总结

# 导入Kivy的App类,它是所有kivy应用的基类 from kivy.app import App # kivy内置了丰富的控件widget 如 按钮button 复选框checkbox 标签label 输入框textinput 滚动容器scrollable container等 from kivy.uix.button import Button # 引入BoxLayout 布局 from ki…

「AI绘画Stable Diffusion 零基础入门 」文生图教程:什么是提示词?万字长文详解提示词的使用,建议收藏!

大家好,我是画画的小强 AI 绘画的一个必不可少的环节就是告诉 AI 描述画面的 Prompt(提示词),但是这种很长很乱、穿插着各种奇怪的数字符号、高深莫测的提示词,究竟在说着什么?难道真的是咒语吗&#xff1…

【力扣高频题】042.接雨水问题

上一篇我们通过采用 双指针 的方法解决了 经典 容器盛水 问题 ,本文我们接着来学习一道在面试中极大概率会被考到的经典题目:接雨水 问题 。 42. 接雨水 给定 n 个非负整数,表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子…

跨平台桌面应用开发工具:electron的优缺点

跨平台桌面应用开发工具Electron是一个由GitHub开发和维护的开源框架,它允许开发者使用HTML、CSS和JavaScript等Web技术来构建跨平台的桌面应用程序。以下是关于Electron的详细介绍: 一、Electron概述 定义:Electron是一个基于Chromium和Nod…

【《无主之地3》风格角色渲染在Unity URP下的实现_角色渲染(第四篇) 】

文章目录 概要描边问题外秒变分叉解决办法1:测试效果如下:外秒变分叉解决办法2:URP管线下PBR渲染源码关键词解释:完整shader代码如下:URP管线下二次元皮肤渲染源码URP管线下二次元头发渲染源码简要介绍文章的目的、主要内容和读者将获得的知识。 概要 提示:《无主之地3》…

Apache中使用SSI设置

先停服务在修改httpd.conf,备份下 Apache\Apache24\conf 设置httpd.conf LoadModule ssl_module modules/mod_ssl.so 取消该命令前的注释符# AddType text/html .shtml AddOutputFilter INCLUDES .shtml 取消该命令前的注释符# 加入html 搜索Options Indexes …

【STM32标准库】DMA双缓冲模式

1.双缓冲模式简介 设置DMA_SxCR寄存器的DBM位为1可启动双缓冲传输模式,并自动激活循环模式,所以设置普通模式或者循环模式都可以。 双缓冲不应用与存储器到存储器的传输。可以应用在从存储器到外设或者外设到存储器。 双缓冲模式下, 两个存…

pbootCMS 数据库sqlite转mysql数据库

前言 pbootCMS默认使用 sqlite数据库 ,那么什么是sqlite数据库呢? SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌…

叉车指纹锁有规定要装吗

叉车作为工业运输的重要工具,其安全性能一直备受关注。在这个信息化、智能化的时代,对于叉车这类高风险的设备,安全性措施显得尤为重要。而叉车指纹锁作为一种高科技安全设备,其在叉车管理中的应用逐渐受到重视。 那么&#xff0c…

探展2024世界人工智能大会之合合信息扫描黑科技~

文章目录 ⭐️ 前言⭐️ AIGC古籍修复文化遗产焕新⭐️ 高效的文档图像处理解决方案⭐️ AIGC扫描黑科技一键全搞定⭐️ 行业级的大模型加速器⭐️ 结语 ⭐️ 前言 大家好,我是 哈哥(哈哥撩编程) ,这次非常荣幸受邀作为专业观众参…

IP-GUARD如何禁止电脑自带摄像头

IP-GUARD可以通过设备管理模块禁止USB接口,所以USB外置摄像头很容易就可以禁止了。 但是笔记本自带摄像头无法禁止,配置客户端策略如下: device_control_unknown_mode1 device_control_unphysical_mode3

PMP–知识卡片--Scrum角色

Scrum 角色 Scrum 团队由 5 到 9 个(72)团队成员组成。有三种类型角色: 产品负责人(PO):产品负责人定义项目愿景、需求和优先级,对产品成功负责。Scrum Master:负责团队&#xff0c…

Unity海面效果——5、水沫和海平线

Unity引擎制作海面效果 大家好,我是阿赵。 继续做海面效果,上次做完了漫反射颜色和水波动画,还有法线和高光效果。 原则上来说,这个海面已经基本能看了,从性能的考虑,到这里差不多可以停止了。不过有些细节…

SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate

在我们的业务流程之中不一定都会是自己模块查询自己模块的信息,有些时候就需要去结合其他模块的信息来进行一些查询完成相应的业务流程,但是在SpringCloud每个模块都相对独立,数据库也有数据隔离。所以当我们需要其他微服务模块的信息的时候&…

HackTheBox--IClean

IClean测试过程 1 信息收集 NMAP端口扫描 80端口测试 echo "10.10.11.12 capiclean.htb" | sudo tee -a /etc/hosts检查页面功能,除了 login 页面无其他可能利用点,可以尝试进行目录爆破和子域名扫描 目录扫描 ./gobuster dir -u http://c…

使用paddleOCR训练自己的数据集到ONNX推理

一、环境安装 1、安装paddlepaddle; https://www.paddlepaddle.org.cn/ 这里安装2.6.1的话使用onnx会出现swish算子报错的问题 python -m pip install paddlepaddle-gpu2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple验证是否成功安装 python import paddl…

C++11——新特性超详细总结

目录 一、C11介绍 二、为什么要用C11 三、新特性总结 1、类型推导(auto/decltype) 2、序列for循环语句 3、 lamdba表达式 4、构造函数:委托构造和继承构造 5、容器(array/forward_list) 6、垃圾回收机制 7、…