Возврат из результатов поиска кнопки для отображения на той же странице в OpenERP

Я создал кнопку «Поиск», которая при нажатии запускает результаты в виде дерева в новом окне. Я хочу, чтобы результаты отображались в виде дерева на той же странице, где находится кнопка «Поиск», прямо под кнопкой «Поиск». Спасибо за вашу помощь!

Вот как выглядит вид:

введите здесь описание изображения

Вот пи-код:

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>

person SmithMcPatrick    schedule 15.12.2014    source источник
comment
Хороший вопрос. Текущая цель принимает это значение => текущий, новый, встроенный, встроенный вид. Но они не будут работать для вас.   -  person Bhavesh Odedra    schedule 15.12.2014
comment
Правильно, Одедра. Я пробовал inlineview, он по-прежнему заменяет окно поиска и кнопку поиска результатами просмотра в виде дерева. Любая идея, как я могу сделать так, чтобы окно поиска, кнопка поиска и результаты в виде дерева были на одной странице?   -  person SmithMcPatrick    schedule 15.12.2014
comment
извините, но я понятия не имею об этом, потому что на той же странице я ничего не могу сказать, потому что это работает на res_model, если это то же самое, что и может быть, но с разными res_model на той же странице, я не знаю :(   -  person Bhavesh Odedra    schedule 15.12.2014
comment
Спасибо за помощь, Одедра.   -  person SmithMcPatrick    schedule 15.12.2014
comment
Одедра, я обновил свой вопрос новым кодом. Теперь код py и XML имеют одинаковую res_model=mrp.bom. Я все еще получаю окно поиска и кнопку поиска, замененные результатами поиска в виде дерева. Любые идеи? Спасибо!   -  person SmithMcPatrick    schedule 15.12.2014
comment
Меня беспокоит часть дизайна, например, нажмите кнопку и отобразите представление дерева ударов   -  person Bhavesh Odedra    schedule 16.12.2014
comment
Пользователь хочет видеть окно поиска, кнопку поиска и список результатов поиска на одной странице.   -  person SmithMcPatrick    schedule 16.12.2014
comment
Давайте продолжим обсуждение в чате.   -  person Bhavesh Odedra    schedule 16.12.2014
comment
почему вы не используете вид поиска по умолчанию?   -  person Atul Arvind    schedule 23.04.2015


Ответы (1)


Прежде всего, я предполагаю, что у вас есть причина не следить за комментарием Атула Арвинда - я не понимаю, почему вы не делаете это в обычном порядке. Простое древовидное представление с прикрепленным к нему представлением поиска...

Но допустим, что вы (или ваши пользователи) имеете в виду какой-то действительно более сложный сценарий, когда вам нужна эта функция поиска внутри какой-то более сложной формы. В этом случае я предлагаю вам использовать функциональность onchange Odoo, которая реализована в 8-й версии с помощью декоратора @api.depends.

Рассмотрим следующий пример. Я даю вам только код 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()

Надеюсь, вы видите, помимо прочего, самый простой вид предлагаемого решения.

person Andrei Boyanov    schedule 01.10.2015