在Odoo搜索域中使用many2one字段

时间:2017-08-07 13:24:58

标签: openerp

我正在尝试使用Odoo ORM根据相关字段的值进行搜索。相关字段可通过2多个关系访问:

info = env['product.supplierinfo'].search([ \
       ('product_tmpl_id.product_variant_id.id', '=', line.product_id.id), \
       ('product_tmpl_id.product_variant_id.active', '=', True), \
       ('x_provides_stock', '=', True), \
       ('x_available_qty', '>', 0)])

如您所见,域中的前2个元组正在通过product_tmpl_id.product_variant_id搜索字段。但是,这个域似乎没有用,因为我得到的结果比我应该多得多。

如果我在查询后将这两个约束添加到过滤器方法中,我会得到预期的结果:

info = env['product.supplierinfo'].search([ \
       ('x_available_qty', '>', 0), \
       ('x_provides_stock', '=', True)]) \
       .filtered(lambda i: i.product_tmpl_id.product_variant_id == line.product_id and i.product_tmpl_id.product_variant_id.active)

第一种方法有什么问题吗?文档说您可以通过域中的many2one字段使用关系遍历。这只限于一个多字段吗?

1 个答案:

答案 0 :(得分:0)

这是我的一个类似的代码。

实施例

    @api.model
    def _getUserId(self):
        return [('personel_ids', '=', self.env['nstdamas.employee'].search([('emp_rusers_id','=',self._uid)]).id)]


asset_ids = fields.Many2one('nstda.mst.asset','Asset', domain=_getUserId, required=True)