百度秒收录技术最新,乐陵网络推广seo优化,c 网站建设报告,网站运营内容建设方案odoo16-domain 参考:https://blog.csdn.net/u013250491/article/details/86699928
domain的使用注意以下几点:
是在py文件中使用还是在xml中使用,py文件是在后端使用可以利用orm, 而xml是在前端渲染,使用的是js,没有办法使用orm如果在xml中使用,domain的格式建议为[[]], 二维…odoo16-domain 参考:https://blog.csdn.net/u013250491/article/details/86699928
domain的使用注意以下几点:
是在py文件中使用还是在xml中使用,py文件是在后端使用可以利用orm, 而xml是在前端渲染,使用的是js,没有办法使用orm如果在xml中使用,domain的格式建议为[[]], 二维数组的形式,js 不太认识[()] 这个玩意
一 domain表达式规则
最简单的格式[(‘字段名’,‘操作符’,值)]
例[(‘shenqr.user_id’,’’,uid)]
1 字段名
1.1 py文件
可以使用ORM, 比如create_uid.company_id.id
1.2 xml文件
因为xml文件是在前端浏览器解析的,所以不能使用orm,只能使用单纯的字段,当然有变通手段,如果需要关联字段,可以在模型中新增一个字段, 通过compute或者 related进行计算或者关联.
2 操作符
操作符说明,,,,,!比较运算,等于,大于,小于,大于等于,小于等于,不等于like模糊匹配,通过%value%进行匹配ilike同like ,但是忽略大小写like可以使用模式匹配下划线-匹配一个字符百分号%匹配零或者多个字符ilike同ilike ,但是忽略大小写not like通过%value%不匹配的not ilike类似not like但是忽略大小写?未设置或者等于未设置表示当值是None或者是False其余和一样in判断value是否在元素的列表里面not in判断value是否不再元素的列表里面child_of判断是否value的子录, [(A,‘child_of’,A)]返回true
主要说明一下 child_of
[(create_uid.company_id,child_of,[user.company_id.id])]这句话表达的意思是, create_uid的公司是当前用户的公司或者子公司.
等价于
[|,(create_uid.company_id,,[user.company_id.id]),(create_uid.company_id.parent_id,,[user.company_id.id])]
3 值 字符串 布尔值 True False 数字等 在xml中, 可以使用uid ,不能获取到其他信息了,是否跟context有关系? 相关的js文件: addons/web/static/src/core/domain.js
4 条件间的逻辑
4.1 波兰表达式
domain使用了波兰表达式, 也称之为前缀表达式,可以不用括号就可以无歧义的表示运算顺序.
中缀表达式 : a b (我们常见的)前缀表达式 a b ( 波兰表达式,操作符在前面,方便计算机处理)后缀表达式 : a b ( 逆波兰表达式,方便计算机处理)
波兰表达式和逆波兰表达式第一个不需要括号第二个用stack处理很方便这两个东西其实就是一个东西只不过用了不同的表达形式。
4.2 操作符
“” 默认操作符,可以省略,在xml中使用需要转义“|”“!”
简单来说波兰表示法是一种操作符置于操作数前并且不需要括号仍然能无歧义地解析表达的方法。 以二元运算为例从左至右读入表达式遇到一个操作符后跟随两个操作数时则计算之然后将结果作为操作数替换这个操作符和两个操作数重复此步骤直至所有操作符处理完毕。
案例:
filter string我的待办 namemyjob
domain[amp;,amp;,(user_id_deal, , uid),(state,,0),|,amp;,(deal_type,,1),(chp_state,in,[0,1]),amp;,(deal_type,,2),(chp_state,,2)]/二 domain使用场景
1 关联字段
(Many2one/One2many/Many2many)过滤出不同的选择结果
account_id fields.Many2one(account.account, stringDefault Debit Account, domain[(active, , False)])也可以用于关系字段,下拉框的级联显示
position_id fields.Many2one(hx.base.position,岗位名称,domain[(department_id,,department_id)])2 在动作中使用domain,筛选符合条件的记录:
record idrelate_partner_opportunities modelir.actions.act_windowfield namenameOpportunities/fieldfield nameres_modelcrm.lead/fieldfield nameview_modekanban,tree,form,graph,calendar/fieldfield namedomain[(type,,opportunity)]/fieldfield namecontext{search_default_partner_id: active_id,default_type: opportunity}/fieldfield nameview_id evalFalse/field namesearch_view_id refcrm.view_crm_case_opportunities_filter/
/record
3 记录规则过滤
record idaccount_move_comp_rule modelir.rulefield namenameAccount Entry/fieldfield namemodel_id refmodel_account_move/field nameglobal evalTrue/field namedomain_force[|,(company_id,,False),(company_id,child_of,[user.company_id.id])]/field
/record
4 搜索过滤 record idview_crossovered_budget_search modelir.ui.viewfield namenamecrossovered.budget.search/fieldfield namemodelcrossovered.budget/fieldfield namearch typexmlsearch stringBudgetfield namename filter_domain[(name,ilike,self)] stringBudget/field namedate_from/field namedate_to/filter stringDraft domain[(state,,draft)] helpDraft Budgets/filter stringTo Approve domain[(state,,confirm)] helpTo Approve Budgets /field namestate//search
/field
/record