我正在尝试使用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字段使用关系遍历。这只限于一个多字段吗?
答案 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)