2017-08-07 3 views
1

私はOdoo ORMを使用して関連フィールドの値に基づいて検索しようとしています。関連分野は、2つのmany2one関係を通してアクセスされる:あなたが見ることができるようにOdoo検索ドメインでmany2oneフィールドを使用

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てフィールドを検索しています。しかし、私が必要以上に多くの結果を得ているので、このドメインは機能していないようです。

私が代わりにクエリの後のフィルタ方法にそれらの2つの制約を追加する場合、私は期待どおりの結果を得る:

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つのmany2oneフィールドに限定されていますか?

答えて

0

私のやや似たようなコードです。

Ex。

@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) 
関連する問題