我一直在尝试在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,当我去编辑引号时,该字段绝对不为空。
非常感谢任何建议。
答案 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>
我仍然不确定为什么这是必要的。