如何在Many2One中搜索其他字段?



python代码:

_name = 'res.partner.table2'
customer_id = fields.Many2one('res.partner', required=True ,string="Customer ID")

.XML:

<field name="arch" type="xml">
<form string="Reward Points">
<field name="customer_id"/>  //how can i search by res.partner customer_id in here 
</form>
</field>

我需要按其他字段而不是"名称"进行搜索。怎么可能?

我们可以通过以下方式实现:

<field name="customer_id" context="{'my_custom_search': True}"/>

我们添加上下文以确保功能将影响特定字段,并且不会干扰现有功能。

class res_partner(models.Model):
_inherit = 'res.partner'
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args = []
if not context:
context = {}
if context.has_key('my_custom_search'):
domain = [('field_name', 'operator', value)]
ids = self.search(domain)
else:
return super(res_partner, self).name_search(cr, user, name, args=args, operator='ilike', context=context, limit=limit)
return self.name_get(cr, uid, ids, context)

例如,如果您想按hr.employee中的新字段(emp_code)进行搜索,我会建议如下:

@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
args = args or []
domain = []
if name:
domain = ['|', ('emp_code', 'ilike', name), ('name', operator, name)]
if operator in expression.NEGATIVE_TERM_OPERATORS:
domain = ['&', '!'] + domain[1:]
return self._search(expression.AND([domain, args]), limit=limit, access_rights_uid=name_get_uid)

expression.NEGATIVE_TERM_OPERATORS将检查负运算符,如!=

这段代码的灵感来自Odooaccount/models/account_account.py这里。

旁注:所有Odoo的社区版本都是从_name_search继承而来的,而不是name_search

我遇到了同样的问题,我必须使用 id 和名称搜索任务中的父任务,这就是我的做法,我使用name_search函数传递域并使用name_get返回结果。希望有用,祝你好运

@api.model
def name_search(self, name, args=None, operator='ilike', limit=100):
args = args or []
recs = self.browse()
if not recs:
recs = self.search(['|',('name', operator, name),('id', operator, name)] + args, limit=limit)
return recs.name_get()

最新更新