首页 > 其他分享 >域(Domain)

域(Domain)

时间:2023-02-09 10:46:29浏览次数:65  
标签:Domain code US ABC 操作符 id

什么是Domain
[('create_uid','=',user.id)]
Domain是个多条件的列表,每个条件是一个三元表达式:[(字段名,操作符,值), (字段名,操作符,值)]
Domain使用场合

  • 权限管理中的行级权限
  • tree视图的过滤器
  • 其它学习到了再补充

字段名

当前模型的字段或者是通过点操作符访问当前模型的Many2one / Many2Many对象。如果左边是Many2Many对象的时候,则表示左边只要任意一个值符合条件则符合条件。

操作符
image.png

注意如果需要在xml使用Domain,大于,小于因为和标签符号一样所以需要转义,大于>,小于<

条件间的逻辑前缀
image.png

示例:

[('name', '=', 'Allen'), '|', ('language.code', '!=', 'en_US'), ('company_id', '=', user.company_id.id)]

值进行筛选的变量,必须能通过操作符来和字段进行比较。

多条件的逻辑运算

['&', ('partner_id.coutnry_id.code', '=', 'CN'), ('partner_id.coutry_id.code', '=', 'US')]

DTCloud是使用了波兰表示法,简单来说,波兰表示法是一种操作符置于操作数前,并且不需要括号仍然能无歧义地解析表达的方法。

波兰表示法的运算顺序

以二元运算为例,从左至右读入表达式,遇到一个操作符后跟随两个操作数时,则计算之,然后将结果作为操作数替换这个操作符和两个操作数;重复此步骤,直至所有操作符处理完毕。

举个栗子

['|','&','|',a,b,c,'&',d,e]

其中a,b,c,e,f,g分别是不带逻辑运算符的表达式,表达式的运算顺序:

  1. ['|','&','|',a,b,c,'&',d,e]

  2. '|','&',(a | b),c,'&',d,e]

  3. ['|',((a | b) & c),'&',d,e]

  4. ['|',((a | b) & c),(d & e)]

  5. [(((a | b) | c) | (d & e))]

逻辑运算符包括
image.png

逻辑运算符默认是'与',‘与’运算符可以不写。

实例

“名字为 ABC”,就是一个最简单的单条件Domain。

[('name','=','ABC')]

“名字为 ABC 而且 语言编码不为en_US”,Domain里条件默认逻辑关系就是and,所以如下。

  1. [('name','=','ABC'),
  2. ('language.code','!=','en_US')]

“名字为 ABC 而且语言编码不为 en_US 而且国家的编码为 be 或者 de”。

  1. [('name','=','ABC'),

  2. ('language.code','!=','en_US'),

  3. '|',('country_id.code','=','be'),

  4. ('country_id.code','=','de')]

  • 如果我们要做到这个效果
    A and (B or C) and D and E

  • 先从里面开始,把or提前
    A and (or B C) and D and E

  • 把里面的and提前,去掉括号
    and A or B C and D E

  • 所以最后的domain可以这样写
    A, '|', B, C, D, E

当然了,我们为什么不写得让自己也容易看一点呢,如下:
A, D, E, '|', B, C
Domain的使用场景

1.关联字段

(Many2one/One2many/Many2many)过滤出不同的选择结果

default_debit_account_id = fields.Many2one('account.account', string='Default Debit Account', domain=[('deprecated', '=', False)])

如上:只有当account.account中字段deprecated=False的记录才能被选择显示
2.过滤出想要显示的记录

在ir.actions.act_windon中添加Domain,当某个地方调用这个动作时,只显示符合domain条件的记录

Opportunities crm.lead kanban,tree,form,graph,calendar [('type','=','opportunity')] { 'search_default_partner_id': active_id, 'default_type': 'opportunity' }
3.权限过滤

Account Entry ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
4.搜索过滤

crossovered.budget.search crossovered.budget

标签:Domain,code,US,ABC,操作符,id
From: https://www.cnblogs.com/DTCLOUD/p/17104367.html

相关文章