我将表单视图定义为常规表单视图的主要继承,但它没有显示。为什么?

时间:2014-12-10 20:40:35

标签: openerp odoo openerp-8

我尝试为act_window创建一个特殊的表单视图,而不是显示常规表单视图。这就是我所做的:

<record id="mrp_bom_form_view_master" model="ir.ui.view">
  <field name="name">mrp.bom.master</field>
  <field name="inherit_id" ref="mrp.mrp_bom_form_view"/>
  <field name="model">mrp.bom</field>
  <field name="mode">primary</field>
  <field name="arch" type="xml">
    <field name="name" position="after">
      <h1>Show me.</h1>
    </field>
  </field>
</record>

<record model="ir.actions.act_window" id="mrp_bom_form_action_base">
  <field name="name">Master Bill of Materials</field>
  <field name="res_model">mrp.bom</field>
  <field name="view_type">form</field>
  <field name="view_mode">form,tree</field>
  <field name="view_id" ref="mrp_bom_form_view_master"/>
  <field name="search_view_id" ref="mrp.view_mrp_bom_filter"/>
</record>

<record model="ir.actions.act_window" id="mrp_bom_form_action_master_product">
  <field name="name">Master Products</field>
  <field name="domain">[('is_master', '=', True), ('category', '=', 'product')]</field>
  <field name="res_model">mrp.bom</field>
  <field name="inherit_id" ref="mrp_bom_form_action_base"/>
</record>

<menuitem
        action="mrp_bom_form_action_master_product"
        id="menu_manufacturing_master_product"
        parent="menu_manufacturing_sana_master"
        name="Products"
        sequence="1"/>

为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

您必须使用 fields_view_get 方法

def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):
    mod_obj = self.pool.get('ir.model.data')
    if context is None: context = {}

    if view_type == 'form':
        if not view_id and context.get('invoice_type'):
            if context.get('invoice_type') in ('out_invoice', 'out_refund'):
                result = mod_obj.get_object_reference(cr, uid, 'account_voucher', 'view_vendor_receipt_form')
            else:
                result = mod_obj.get_object_reference(cr, uid, 'account_voucher', 'view_vendor_payment_form')
            result = result and result[1] or False
            view_id = result
        if not view_id and context.get('line_type'):
            if context.get('line_type') == 'customer':
                result = mod_obj.get_object_reference(cr, uid, 'account_voucher', 'view_vendor_receipt_form')
            else:
                result = mod_obj.get_object_reference(cr, uid, 'account_voucher', 'view_vendor_payment_form')
            result = result and result[1] or False
            view_id = result

    res = super(account_voucher, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
    doc = etree.XML(res['arch'])

    if context.get('type', 'sale') in ('purchase', 'payment'):
        nodes = doc.xpath("//field[@name='partner_id']")
        for node in nodes:
            node.set('context', "{'default_customer': 0, 'search_default_supplier': 1, 'default_supplier': 1}")
            if context.get('invoice_type','') in ('in_invoice', 'in_refund'):
                node.set('string', _("Supplier"))
    res['arch'] = etree.tostring(doc)
    return res

或者您可以使用

  <record model="ir.actions.act_window.view" id="mrp_bom_form_view_master_form">
        <field name="sequence" eval="1"/>
        <field name="view_mode">tree</field>
        <field name="view_id" ref=module.xml_id_tree_view/>
        <field name="act_window_id" ref="mrp_bom_form_action_base"/>
    </record>

    <record model="ir.actions.act_window.view" id="mrp_bom_form_view_master_tree">
        <field name="sequence" eval="2"/>
        <field name="view_mode">form</field>
        <field name="view_id" ref=module.xml_id_form_view/>
        <field name="act_window_id" ref="mrp_bom_form_action_base"/>
    </record>

为了更好地理解,您可以查看 voucher_payment_receipt_view.xml &amp; account_voucher 模块

中的 account_voucher.py