odoo domain 的三种方法
简介#
在 odoo 中 domain 无处不在,就是过滤数据用的,备选项,可选项,都是用domain过滤的。
也就是sqlalchemy的filter
一:定义在model#
class DemoExpenseTutorial(models.Model): _name = 'demo.expense.tutorial' ...... employee_id = fields.Many2one('hr.employee', string="Employee", required=True, domain=[('active', '=', True)] )
二:定义在view#
<record id="view_form_demo_expense_tutorial" model="ir.ui.view"> <field name="name">Demo Expense Tutorial Form</field> <field name="model">demo.expense.tutorial</field> <field name="arch" type="xml"> <form string="Demo Expense Tutorial"> ...... <field name="employee_id" domain="[('user_id', '=', user_id)]"/> ...... </group> </sheet> </form> </field> </record>
三:定义在onchang#
@api.onchange('user_id') def onchange_user_id(self): # domain result = dict() result['domain'] = { 'employee_id': [('user_id', '=', self.user_id.id)] } # equal # self.env['hr.employee'].search([('user_id', '=', self.user_id.id)]) return result
四:domain的波兰表示法#
domain的集合是用波兰表示法做的
五:特殊运算符 child_of、parent_of#
有时候遇到需要搜索或者筛选出层级关系中,某个节点以后该节点的所有子节点,或者某节点以及该节点的所有父节点的记录时,需要使用odoo的child_of,和parent_of两个筛选条件
使用示例:
self.search([('id', 'child_of', menu_roots.ids)]) domain="[('hr_department_id', 'child_of', parent.department_id)]" ('id', 'parent_of', self.subsystem_id.id) domain = [('view_location_id', 'parent_of', self.ids)]
对python代码和xml中皆可使用
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/16512912.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!