您的位置:首页 > 大数据 > 人工智能

(23)odoo中的domain表达式

2016-02-24 09:42 441 查看
---------
更新日期:
09:10 2016-03-03 星期四
---------
* Domain 表达式

# 用于过滤记录数,相当于sql的where
('field', 'operator',value) 每个条件表达式是元组类型
第一个是对象的一个column,也就是字段名
第二个是比较运算符
第三个就是用来比较的值
domain=[('user_id', '=', uid)] 当前用户做为条件过滤
#比较运算符如下:
<,>,<=,>=,!=
=?
=like
like
not like
ilike(大小写不敏感)
not ilike
=ilike
child_of 找直接和间接的子对象
in
not in
#条件可以用逻辑符连起来 用列表类型来组织
逻辑运算符作为前缀放置于条件前面
| & 必须两个条件链接 !作用于一个条件 理解时,从里往外剥

& 是且的意思,是默认
|是或
! 是非,相反的意思
['!',('user_id','=',uid)] 不是当前用户的记录
['|',('user_id','=',uid),('user_id','=',False)] 不是当前用户,或没有用户的记录
复杂一点的:
['|', ('message_follower_ids', 'in', [user.partner_id.id]),'|', ('user_id', '=', user.id),
('user_id', '=', False)]
逻辑是连后面两个domain条件

再来一个
['|','|',('group_ids','in',[g.id for g in user.groups_id]),('user_id','=',user.id),
'&',('user_id','=',False),('group_ids','=',False),'|','|',('company_id','=',False),
('company_id','child_of',[user.company_id.id]),('company_id.child_ids','child_of',[user.company_id.id])]
分解理解:
['|',
'|',('group_ids','in',[g.id for g in user.groups_id]),('user_id','=',user.id),
'&',('user_id','=',False),('group_ids','=',False),
'|',
'|',('company_id','=',False),('company_id','child_of',[user.company_id.id]),
('company_id.child_ids','child_of',[user.company_id.id])]

domain="[('create_date','=',(context_today() + datetime.timedelta(days=-1)).strftime('%%Y-%%m-%%d'))]"
domain="[('date','<=',time.strftime('%%d/%%m/%%Y'),
('date','>=',((context_today()-relativedelta(months=3)).strftime('%%d/%%m/%%Y')))]"
过去三个月

# 在Action中定义,domain用于对象默认的搜索条件
<field name="domain">[('state','not in',('draft','sent','cancel'))]</filed>
打开订单窗口,不搜索处于('draft','sent','cancel') 三种状态的订单

# 在对象(或视图)的关联字段 字段值 domain 用于过滤
'product_id':fields.many2one('product.product','Product',domain=[('sale_ok','=',True)],chang_default=True)
定义关联产品,只显示可销售产品

# 在搜索视图 domain用于自定义过滤条件
<field name="name" string="Sale Order" filter_domain="['|'('name', 'ilike',self),('client_order_ref','ilike',self)]"
在搜索视图输入订单编号,同时按订单编号和客户关联编号搜索
<filter string="My Sales Orders" domain="[('user_id','=',uid)]" help="My Sales Orders" icon="terp-personal"
name="my_sale_orders_filter" />

# 在记录规则中定义 domain 用于定义用户对对象记录的访问权限
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
定义用户允许查询未指定分公司或订单指定分公司用户具有的访问权限的销售订单
['|',('section_id','=',user.default_section_id.id),('section_id','=',False)]
查看自己的团队

* 实例:
# 过滤当天的订单
[('date_order','<=', datetime.datetime.combine(
context_today(),datetime.time(23,59,59))),
('date_order','>=', datetime.datetime.combine(context_today(), datetime.time(0,0,0)))]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: