鉴于sale.order.line,Odoo在uom上设置了默认域名

时间:2016-09-20 06:02:39

标签: openerp views odoo-9

我一直在尝试在sale.order.line的product_uom字段中设置默认域。编辑现有报价单时,它不会显示与默认销售单位相同的类别中的计量单位。所以,如果你以单位出售,你会想要看到单位和数十。相反,您会看到cm,g,in等。创建订单时,您没有此问题,因为这些值是通过onchange设置的。

我认为这将非常简单,但我无法理解为什么我的尝试失败了。我试过了:

     <record id="sale_order_form_view_inherit_product_uomconv" model="ir.ui.view">

        <field name="name">sale.order.form.inherit</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='order_line']/tree/field[@name='product_uom']" position="attributes">
                <attribute name="domain">[('category_id', '=', product_id.uom_id.category_id.id)]</attribute>
            </xpath>
            </field>
     </record>

我也试过

      <record id="sale_order_form_view_inherit_product_uomconv" model="ir.ui.view">

        <field name="name">sale.order.form.inherit</field>
        <field name="model">sale.order</field>
        <field name="inherit_id" ref="sale.view_order_form"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='order_line']/tree/field[@name='product_uom']" position="replace">
                <field name="product_uom" domain="[('category_id', '=', product_id.uom_id.category_id.id)]" attrs="{'readonly': [('state', 'in', ('sale','done', 'cancel'))]}" context="{'company_id': parent.company_id}" groups="product.group_uom" options='{"no_open": True}'/>
            </xpath>
            </field>
      </record>

我收到错误“未捕获错误:AttributeError:对象没有属性'uom_id'”。我真的不明白这是怎么回事。字段product_id已在视图中声明,数据库将其映射到product.product,当我去编辑引号时,该字段绝对不为空。

非常感谢任何建议。

2 个答案:

答案 0 :(得分:0)

点击此处查看为product_uom设置域名的onchange product_id_change

最好的办法是在模块中覆盖它。

视图中的此类域确实容易出错,因为当您像product_id.uom_id.category_id.id一样访问嵌套对象时,您并不知道是否所有满足此链的值都存在。更糟糕的是,odoo的视图渲染并不够聪明,因为它不会变得柔和。在这些条件下。

答案 1 :(得分:0)

我仍然不明白为什么我的原始场景失败了...但我找到了解决方法。

class NewSaleOrderLine(models.Model):
_inherit = 'sale.order.line'
#These computed fields are for calculating the domain on a form edit
relcatid = fields.Many2one(related='product_uom.category_id',store=True)

现在在xml ...

<record id="sale_order_form_view_inherit_product_uomconv" model="ir.ui.view">
   <field name="name">sale.order.form.inherit</field>
   <field name="model">sale.order</field>
   <field name="inherit_id" ref="sale.view_order_form"/>
   <field name="arch" type="xml">
       <xpath expr="//field[@name='order_line']/tree/field[@name='qty_to_invoice']" position="after">
           <field name="relcatid" invisible="1"/>
       </xpath>

       <xpath expr="//field[@name='order_line']/tree/field[@name='product_uom']" position="replace">
           <field name="product_uom" domain="[('category_id', '=', relcatid)]" attrs="{'readonly': [('state', 'in', ('sale','done', 'cancel'))]}" context="{'company_id': parent.company_id}" groups="product.group_uom" options='{"no_open": True}'/>
       </xpath>
   </field>
</record>

我仍然不确定为什么这是必要的。