关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

字段域Domain设置

在odoo中,通过domain来过滤数据记录 domain是一个list,里面有多个条件 条件是一个有3个元素的元祖 ('模型的字段','操作符','值') 比如你要过滤出产品为服务类型并且价格大于1000的产品 domain = [('product_type', '=', 'service'), ('unit_price', '>', 1000)] domain作用在一个model上 用model.search(domain) 默认的 domain是以and的方式连接2个条件 也就是说 上面的domain = ['&',('product_type', '=', 'service'), ('unit_price', '>', 1000)] 其他逻辑符 & (AND), | (OR) and ! (NOT) 来看另外一个domain ['|', ('product_type', '=', 'service'), '!', '&', ('unit_price', '>=', 1000), ('unit_price', '<', 2000)] 读法 先看最后一个逻辑符 后面所有的条件作为操作数, 变成 ['|', ('product_type', '=', 'service'), '!', cond] 同样规则 ['|', ('product_type', '=', 'service'), cond] domain的另外一个用是用在关联字段里,可以在model.py field里定义或在xml view的field里, 过滤关联字段记录 参考 练习 过滤出只是老师的res.partner记录 instructor_id = fields.Many2one('res.partner', string="Instructor", domain=[('instructor', '=', True)]) 下面这句话的意思 A domain declared as a literal list is evaluated server-side and can't refer to dynamic values on the right-hand side, a domain declared as a string is evaluated client-side and allows field names on the right-hand side domain如果是一个list 右值只能是一个字面值 如果是string(在xml里定义) 右值可以引用其他字段的值 练习 instructor_id = fields.Many2one('res.partner', string="Instructor", domain=['|', ('instructor', '=', True), ('category_id.name', 'ilike', "Teacher")]) 过滤出 res.partner 是instructor 或res.partner.category_id 包含Teacher的记录 http://stackoverflow.com/questions/29442993/available-domain-operator-in-openerp-odoo https://www.odoo.com/forum/help-1/question/domain-notation-using-multiple-and-nested-and-2170
转载请注明出处
分享到: 更多 (0)

评论 0