Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

关于<xpath position="attributes"> 的问题



  • 本人遇到一个问题,代码如下: <br /><br /><br /><record id="sale_view_order_form" model="ir.ui.view"><br />            <field name="name">sale.order.form</field><br /> <field name="model">sale.order</field><br />            <field name="inherit_id" ref="sale.view_order_form"/> <br /> <field name="arch" type="xml"><br />     <field name="partner_id" position="after"><br />       <field name="boatmodel_id" /><br />     </field><br />     <xpath expr="//field[@name='product_id']"  position="attributes"><br />       <attribute name="context">{'boatmodel_id' : parent.boatmodel_id}</attribute><br />     </xpath><br /> </field><br /> </record> <br /><br /><br />问题:跟踪product.product 的search 发现{'boatmodel_id' : parent.boatmodel_id}  没有传给 context<br />不知何故?<br /><br />context 为:  dict: {u'lang': u'en_US', u'shop': 1, u'tz': u'Asia/Hong_Kong', u'uid': 1, u'pricelist': 1, u'partner_id': 5, u'uom': 1, u'quantity': 1}<br /><br /><br />sale.view_order_form 其中代码为:<br /><br />    <field name="product_id" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" groups="base.group_user" on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/>



  • 本人遇到一个问题,代码如下: <br /><br /><br /><record id="sale_view_order_form" model="ir.ui.view"><br />            <field name="name">sale.order.form</field><br /> <field name="model">sale.order</field><br />            <field name="inherit_id" ref="sale.view_order_form"/> <br /> <field name="arch" type="xml"><br />     <field name="partner_id" position="after"><br />       <field name="boatmodel_id" /><br />     </field><br />     <xpath expr="//field[@name='product_id']"  position="attributes"><br />       <attribute name="context">{'boatmodel_id' : parent.boatmodel_id}</attribute><br />     </xpath><br /> </field><br /> </record> <br /><br /><br />问题:跟踪product.product 的search 发现{'boatmodel_id' : parent.boatmodel_id}  没有传给 context<br />不知何故?<br /><br />context 为:  dict: {u'lang': u'en_US', u'shop': 1, u'tz': u'Asia/Hong_Kong', u'uid': 1, u'pricelist': 1, u'partner_id': 5, u'uom': 1, u'quantity': 1}<br /><br /><br />sale.view_order_form 其中代码为:<br /><br />    <field name="product_id" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" groups="base.group_user" on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/>



  • 先给一段代码,慢慢体会下。<br /><br />        <record id="sale_view_order_form" model="ir.ui.view"><br />            <field name="name">sale.order.form</field><br />            <field name="model">sale.order</field><br />            <field name="inherit_id" ref="sale_stock.view_order_form_inherit"/><br />            <field name="arch" type="xml"><br />                <data><br />                    <field name="partner_id" position="after"><br />                        <field name="boatmodel_id" /><br />                    </field><br />                    <xpath expr="//field[@name='product_id']"  position="attributes"><br />                        <attribute name="context">{'xxxx':'xxxx', 'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}</attribute><br />                    </xpath><br />                </data><br />            </field><br />        </record>  <br /><br /><br />



  • 几点说明:<br /><br />1、inherit_id 不是 sale.view_order_form,而是 sale_stock.view_order_form_inherit。这是因为sale.view_order_form的 product_id field 被 sale_stock.view_order_form_inherit replace 替换了。<br /><br />因此,[color=red]必须继承替换的VIEW ID[/color]。<br /><br />2、<data> 标签,表示多个更改,虽然有时不用 data 也可以用,但严重建议遵循官方规范 https://doc.openerp.com/trunk/server/03_module_dev_03/#multiple-changes<br /><br />3、<attribute name="context"> 此处值为替换,因此需要把原来的 context 值写上。 如 {'xxxx':'xxxx', 'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}<br /><br /><br /><br />另外,需要提醒的是:我在测试中发现 [color=red]xpath  只匹配第一个符合的node[/color]  (存疑,待后续求证)<br /><br /><xpath expr="//field[@name='product_id']"  position="attributes"><br /><br />因此这样只替换了 sale.order.line form view 的 product_id field ,如需替换 sale.order.line tree view 则需另外加一段,如:<br /><br />                    <xpath expr="//tree/field[@name='product_id']"  position="replace"><br />                            。。。。。。<br />                    </xpath><br /><br /><br />谢谢 !



  • 感谢,感谢!<br /><br />昨晚也搜索到了 sale_stock.view_order_form_inherit ,试了一下,未果就放弃了。<br /><br />大师一出手,说得明明白白,一片 雨过天清 豁然开朗 感觉,苦想两天的问题终于明白了。<br /><br />buke,Thanks!<br /><br /><br />[attachimg=1]<br /><br />附上 sale_stock.view_order_form_inherit 部份代码:<br /><br />      sale_stock_view.xml<br /><br />        <record[color=red] id="view_order_form_inherit"[/color] model="ir.ui.view"><br />            [color=blue]<field name="name">sale.order.form.sale.stock</field>[/color]<br />            <field name="model">sale.order</field><br />            <field name="inherit_id" ref="sale.view_order_form"/><br />            <field name="arch" type="xml"><br />                <data><br />                  ......<br />                  <field name="product_id" position="replace"><br />                      <field name="product_id"<br />                      context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}"<br />                      groups="base.group_user" <br />                      on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, True, parent.date_order, product_packaging, parent.fiscal_position, False, context)"/><br />                  </field>



  • 嗯. xpath 一定要写得唯一才可以.<br />xpath 如果不能唯一, 那肯定只对第一个匹配项进行 replace<br /><br />另: OpenERP context 传丢已经见惯不惊了.... context 传递的坑粉多....


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待