Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 如何通过Odoo中的计算字段进行搜索?_Search_Odoo_Odoo 9_Odoo View_Computed Field - Fatal编程技术网

Search 如何通过Odoo中的计算字段进行搜索?

Search 如何通过Odoo中的计算字段进行搜索?,search,odoo,odoo-9,odoo-view,computed-field,Search,Odoo,Odoo 9,Odoo View,Computed Field,我正试图通过Odoo 9中的计算字段进行搜索。但它返回所有记录作为结果 类版本(models.Model): _name='product\u cars\u application.version' name=fields.Char(compute=“\u get\u name”,store=True) @api.1 def_get_name(self): self.name=“%s%s(%s)”%(self.brand\u id, self.model_id.name, self.vname,

我正试图通过Odoo 9中的计算字段进行搜索。但它返回所有记录作为结果

类版本(models.Model):
_name='product\u cars\u application.version'
name=fields.Char(compute=“\u get\u name”,store=True)
@api.1
def_get_name(self):
self.name=“%s%s(%s)”%(self.brand\u id,
self.model_id.name,
self.vname,
本人(身份证年)
我尝试过使用
store=True
和不使用它,但名称字段未存储在数据库中。我还尝试从数据库中删除列“name”,然后我更新了模块,但它没有存储计算。computed字段在表单视图上工作正常,但名称未存储,搜索也不起作用

那么,如何按字段名进行搜索?

将其添加到代码中

 def _name_search(self,name, args=None, operator='ilike', limit=100):
    if operator == 'like': 
       operator = 'ilike'

    versions=self.search([('name', operator, name)], limit=limit)
    return versions.name_get()

 name = fields.Char(compute=_get_name, store=True,search=_name_search)
您可以在文档中看到详细信息

“计算字段”部分适用于您


希望它能起作用。让我知道

我不建议您在计算字段中使用
store=True
,如果这些字段不是完全必需的(如果您希望
此字段分组,则需要使用这些字段),因为在某些情况下,尽管最新版本的效果更好,但它们的工作效果并不好。所以,我想你可以这样做:

类版本(models.Model):
_名称='product\u cars\u application.version'
name=fields.Char(
compute=“\u compute\u name”,
search=“\u search\u name”,
)
@api.1
定义计算名称(自身):
self.name=“%s%s(%s)”%(self.brand\u id,
self.model_id.name,
self.vname,
本人(身份证年)
定义搜索名称(自身、运算符、值):
“”“实际上,这会将一个域转换为另一个域。
有了这个新域名,Odoo可以很好地进行搜索
ID列表是没有计算字段的最简单方法
*[('id','in',id_列表)]
"""
如果运算符=='ilike':
name=self.env.context.get('name',False)
如果名称不为False:
id_列表=[]
product\u cars=self.env['product\u cars\u application.version'].搜索([]
对于产品车中的汽车:
如果名称在car.name中:
id_list.append(lot.id)
返回[(‘id’、‘in’、地块id清单)]
其他:
返回[('id','in',[])]
其他:
_记录器错误(
'字段名不可搜索'
'带运算符:{}',格式(运算符)
)
考虑到这种搜索方式比将值存储在数据库中效率更低,因为您总是必须遍历所有记录来计算值


顺便说一句,对于您的特定使用情况,您可以做的最好的事情是将字段名创建为普通字符,而不是计算的字符。可以设置默认值来创建名称。这样,值将被存储,问题将消失。

必须对def\u name\u search(self,name,args=None,operator='ilike',limit=100)进行一些更改:如果operator='Like':operator='ilike'versions=self.search([('name',operator,name)],limit返回版本。name\u get()确定。我根据您的需要更改了代码。有同样问题的人可以更好地理解我们在这里做了什么。我不建议在计算字段中使用
store=True
,因为它们在某些情况下不能很好地工作。