我创建了“搜索”按钮,单击该按钮可在新窗口中启动树视图结果。 我希望在“搜索”按钮所在的同一页面上的树视图中显示结果,位于“搜索”按钮的正下方。谢谢你的帮助!
以下是视图的外观:
这是py代码:
class mrp_bom(osv.Model):
_inherit = 'mrp.bom'
def action_search(self, cr, uid, ids, vals, context=None):
bom_ids = []
pd_ids = []
product_complete = []
ptemplid = int(self.browse(cr, uid, ids[0], context=context).product_tmpl_id.id)
mbl_obj = self.pool.get('mrp.bom.line')
id_s = mbl_obj.search(cr, uid, [('product_id', '=', ptemplid)])
for rec in mbl_obj.browse(cr, uid, id_s, context=context):
bom_ids.append(rec.bom_id.id)
for rec in self.browse(cr, uid, bom_ids, context=context):
pd_ids.append(rec.product_id.id)
pp_obj = self.pool.get('product.product')
for rec in pp_obj.browse(cr, uid, pd_ids, context=context):
product_complete.append('['+ str(rec.default_code) + ']'+ ' ' + str(rec.name_template))
print "\n\n Inside action_search() product_complete ", product_complete
# raise osv.except_osv(('Message!'), ('Inside action_search!' ) )
# vals = {'product_id' : product_complete}
# print "\n\n Inside action_search() vals ", vals
# return {'value' : vals}
domain = [('id','=',bom_ids)]
return {
'type': 'ir.actions.act_window',
'name': _('BOM'),
'res_model': 'mrp.bom',
'view_mode': 'tree',
'target': 'inlineview',
'domain': domain,
}
这是我的XML:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="action3" model="ir.actions.act_window">
<field name="name">Search BOM</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.bom</field>
<field name="domain">[('bom_id', 'in', active_ids)]</field>
<field name="view_type">form</field>
<field name="target">inline</field>
<field name="view_id" ref="bom_where_use_form"/>
</record>
<record id="ir_BOM_structure3" model="ir.values">
<field eval="'client_action_multi'" name="key2"/>
<field eval="'mrp.bom'" name="model"/>
<field name="name">Search BOM</field>
<field eval="'ir.actions.act_window,'+str(action3)" name="value"/>
</record>
<record id="bom_where_use_form" model="ir.ui.view">
<field name="name">bom.where.use.form</field>
<field name="model">mrp.bom</field>
<field name="priority" eval="20"/>
<field name="type">form</field>
<field name="arch" type="xml">
<label for="product_tmpl_id" string="Search BOM by Product" />
<field name="product_tmpl_id" > </field>
<button name="action_search" string="Search" type="object" class="oe_highlight"/>
</field>
</record>
</data>
</openerp>
答案 0 :(得分:0)
首先,我认为你有理由不遵循Atul Arvind的评论 - 我不明白你为什么不以正常的方式做到这一点。简单的树视图附加了一个搜索视图...
但是,假设你(或你的用户)有一些非常复杂的场景,你需要在一些更复杂的形式中使用这个搜索功能。在这种情况下,我建议你使用Odoo的onchange
功能,这是在@ api.depends装饰器的帮助下在第8版中完成的。
考虑以下示例。我只是给你Python代码,因为我很确定它足以让你看到整个想法:
from openerp import models, fields, api
class mrp_bom_search(models.Model):
_name = 'mrp.bom.search'
product = fields.Many2one('product.product')
boms = fields.Many2many('mrp.bom', compute='_get_boms')
@api.depends('product')
def _get_boms(self):
mbl_obj = self.env['mrp.bom.line']
bom_lines = mbl_obj.search([('product_id', '=',
self.product.id)])
self.boms = bom_lines.bom_id
mrp_bom_search()
我希望你能看到所提出的解决方案最简单的外观。