我尝试为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"/>
为什么它不起作用?
答案 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