Search code examples
pythonodoo

How to search product by field in different table


I want to use name_search in product to get product by search the lot name which in stock.production.lot

relation stock_quant_ids,product_id,lot_id

class ProductProduct(models.Model):
    _inherit = 'product.product'

    @api.model
    def name_search(self, name='', args=None, operator='ilike', limit=100):

        args = args or []
        print('arg ',args)
        recs = self.search([('???', operator, name)]  args, limit=limit) #stock_quant_ids.lot_id.name
        print('recs ', recs)
        if not recs.ids:
            return super(ProductProduct, self).name_search(name=name, args=args,
                                                       operator=operator,
                                                       limit=limit)
        return recs.name_get()

Solution

  • Try this:

    @api.model
    def name_search(self, name='', args=None, operator='ilike', limit=100):
        """ search for product using the Lot number """
        args = args or []
        recs = None
        # only perform search by when the name is passed
        if name:
            # don't use limit here
            recs = self.env['stock.production.lot'].search([('name', operator, name)])
    
        if recs:
            # handle extra filter that was passed by the domain attribute in the XML
            args = expression.AND([args, [('id', 'in', recs.mapped('product_id').ids)]])
            return self.search(args, limit=limit).name_get()
    
        # no Lot was founded may be the user meant to search by product name
        return super(ProductProduct, self).name_search(name=name,
                                                args=args,
                                                operator=operator,
                                                limit=limit)