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 打开隐藏的搜索视图_Search_View_Openerp_Hidden_Invisible - Fatal编程技术网

Search 打开隐藏的搜索视图

Search 打开隐藏的搜索视图,search,view,openerp,hidden,invisible,Search,View,Openerp,Hidden,Invisible,我有一个从外部数据库读取的TransientModel,因此我创建了带有函数字段的模型,并声明了搜索函数 这是一个部分列声明: _columns = { 'web_id': fields.function(_get_data, string='ID', fnct_search=_search_data, type='integer', method=True, multi='external'), ..... } 树视图的操作是 <record id="

我有一个从外部数据库读取的TransientModel,因此我创建了带有函数字段的模型,并声明了搜索函数

这是一个部分列声明:

    _columns = {
        'web_id': fields.function(_get_data, string='ID', fnct_search=_search_data, type='integer', method=True, multi='external'),
 .....
    }
树视图的操作是

<record id="action_preview_orders" model="ir.actions.act_window">
    <field name="name">Preview Orders</field>
    <field name="type">ir.actions.act_window</field>
    <field name="res_model">external.data</field>
    <field name="view_type">tree</field>
    <field name="view_mode">tree</field>
    <field name="view_id" ref="preview_orders_view"/>
    <field name="target">current</field>
    <field name="search_view_id" ref="preview_orders_view_filters"/>
</record>
搜索函数是一个虚拟函数:

    def _search_data(self, cr, uid, obj, name, args, context):
        return [('id','in',[0])]

您需要创建函数\u search\u data(对于fnct\u search=\u search\u data)

在res.groups表中签出全名

def _get_full_name(self, cr, uid, ids, field, arg, context=None):
    res = {}
    for g in self.browse(cr, uid, ids, context):
        if g.partner_id.new_ic_number:
            res[g.id] = g.partner_id.new_ic_number
        elif g.partner_id.old_ic_number:
            res[g.id] = g.partner_id.old_ic_number
            #~ res[g.id] = '%s / %s' % (g.category_id.name, g.name)
        else:
            res[g.id] = ''
    return res

def _search_customer_ic(self, cr, uid, obj, name, args, context=None):
    ids = set()
    partner_obj = self.pool.get('res.partner')
    partner_ids1 = partner_obj.search(cr,uid,[('new_ic_number','ilike',args[0][2])])
    partner_ids2 = partner_obj.search(cr,uid,[('old_ic_number','ilike',args[0][2])])
    partner_ids = partner_ids1+partner_ids2
    partner_ids = list(set(partner_ids))
    agreement_ids = self.search(cr,uid,[('partner_id','in',partner_ids)])
    return  [('id','in',agreement_ids)]
_columns = {
'ic_number':fields.function(_get_full_name, type='char', string='Customer IC', fnct_search=_search_customer_ic),
  }

这是一个示例代码,用于在协议表(自定义表)中检索基于客户ic号的搜索,其中我们有合作伙伴id,没有ic号,因此我从res.partner旧ICU编号或新ICU编号和相同的功能字段通过搜索方法在协议表中搜索

我已经做了一个,一个虚拟的:定义搜索数据(self,cr,uid,obj,name,args,context):返回[('id','in',[0])]你必须根据你的搜索数据使用它,因为数据没有存储在表中,所以你需要从相应的表中获取数据进行搜索,也需要在这里发布你的"获取"数据以便更好地理解。我把它添加到我原来的post"获取"数据中是可以的,但是fnct"搜索="搜索"数据呢?搜索函数是一个伪函数(我只是编辑了这个问题以将其包括在内)但我不认为虚拟搜索函数会导致搜索视图被隐藏:我在其中放置了一个断点,而它根本不会被调用!
    def _search_data(self, cr, uid, obj, name, args, context):
        return [('id','in',[0])]
def _get_full_name(self, cr, uid, ids, field, arg, context=None):
    res = {}
    for g in self.browse(cr, uid, ids, context):
        if g.category_id:
            res[g.id] = '%s / %s' % (g.category_id.name, g.name)
        else:
            res[g.id] = g.name
    return res

def _search_group(self, cr, uid, obj, name, args, context=None):
    operand = args[0][2]
    operator = args[0][1]
    lst = True
    if isinstance(operand, bool):
        domains = [[('name', operator, operand)], [('category_id.name', operator, operand)]]
        if operator in expression.NEGATIVE_TERM_OPERATORS == (not operand):
            return expression.AND(domains)
        else:
            return expression.OR(domains)
    if isinstance(operand, basestring):
        lst = False
        operand = [operand]
    where = []
    for group in operand:
        values = filter(bool, group.split('/'))
        group_name = values.pop().strip()
        category_name = values and '/'.join(values).strip() or group_name
        group_domain = [('name', operator, lst and [group_name] or group_name)]
        category_domain = [('category_id.name', operator, lst and [category_name] or category_name)]
        if operator in expression.NEGATIVE_TERM_OPERATORS and not values:
            category_domain = expression.OR([category_domain, [('category_id', '=', False)]])
        if (operator in expression.NEGATIVE_TERM_OPERATORS) == (not values):
            sub_where = expression.AND([group_domain, category_domain])
        else:
            sub_where = expression.OR([group_domain, category_domain])
        if operator in expression.NEGATIVE_TERM_OPERATORS:
            where = expression.AND([where, sub_where])
        else:
            where = expression.OR([where, sub_where])
    return where

_columns = {
    'full_name': fields.function(_get_full_name, type='char', string='Group Name', fnct_search=_search_group),
}
def _get_full_name(self, cr, uid, ids, field, arg, context=None):
    res = {}
    for g in self.browse(cr, uid, ids, context):
        if g.partner_id.new_ic_number:
            res[g.id] = g.partner_id.new_ic_number
        elif g.partner_id.old_ic_number:
            res[g.id] = g.partner_id.old_ic_number
            #~ res[g.id] = '%s / %s' % (g.category_id.name, g.name)
        else:
            res[g.id] = ''
    return res

def _search_customer_ic(self, cr, uid, obj, name, args, context=None):
    ids = set()
    partner_obj = self.pool.get('res.partner')
    partner_ids1 = partner_obj.search(cr,uid,[('new_ic_number','ilike',args[0][2])])
    partner_ids2 = partner_obj.search(cr,uid,[('old_ic_number','ilike',args[0][2])])
    partner_ids = partner_ids1+partner_ids2
    partner_ids = list(set(partner_ids))
    agreement_ids = self.search(cr,uid,[('partner_id','in',partner_ids)])
    return  [('id','in',agreement_ids)]
_columns = {
'ic_number':fields.function(_get_full_name, type='char', string='Customer IC', fnct_search=_search_customer_ic),
  }