1

在这张图片中,有一条产品搜索记录将搜索namedefault_code。我需要这样做,以便它也可以查看我的自定义 Many2Many 字段。

搜索产品

这是继承模型中的字段。

product_list = fields.Many2many("product.list", string="Product List")

定制模型只有 _name、_description 和 name 变量。

问题是如何进行搜索以查看该字段的所有可能的 Many2Many 数据。

我在继承模型中试过这个:

@api.model
def name_search(self, name='', args=None, operator='ilike', limit=100):
    res = super(product_template_inherit, self).name_search(name='', args=None, operator='ilike', limit=100)
    ids = self.search(args + [(name, 'in', 'product_list.name')], limit=limit)
    if ids:
        return ids.name_get()
    return res

搜索没有任何反应。无论上面的代码如何,它仍然使用相同的行为进行搜索。

摘要:我需要能够按产品列表搜索产品(product.template模型中继承的自定义Many2Many字段)

==============================================

更新

我一直在尝试的当前代码现在是这个。

@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
    args = args or []
    if operator == 'ilike' and not (name or '').strip():
        domain = []
    else:
        domain = ['|', ('name', 'ilike', name), ('product_list.name', 'ilike', name)]
        product_ids = self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid)
    return self.browse(product_ids).name_get()

但是,它看起来仍然使用相同的旧字段进行搜索。它不会改变我的函数所写的行为。

4

1 回答 1

1

您可以计算搜索域,然后返回该_search方法的结果。

车队模块已经使用相同的逻辑来使用司机姓名搜索车辆,您只需将其替换driver_idproduct_list

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

    @api.model
    def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
        args = args or []
        if operator == 'ilike' and not (name or '').strip():
            domain = []
        else:
            domain = ['|', ('name', operator, name), ('product_list.name', operator, name)]
        return self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid)
于 2021-03-08T07:13:53.853 回答