Odoo If陈述与类别

时间:2018-10-01 15:38:58

标签: odoo odoo-10

您好,我正在使用Odoo10,并且已将某些产品分配给类别。在我的销售订单屏幕上,我有2个选择框,一个是“地毯”,另一个是“地板”。下面是我显示某些字段的代码

@api.onchange('squarebox')
    def _onchange_default_code(self):
      if self.flooring2:
        self.boxes = (self.squaremtr) / (self.squarebox or 1)
        self.squaremtrsold = (self.squarebox or 1) * (self.suggestbox)

我不是在使用选择字段,而是想知道是否有可能基于产品所在的类别来执行IF语句。因此,代替if self.flooring2:之类的东西

如果self.productid属于“地毯”类别:

2 个答案:

答案 0 :(得分:1)

  • 首先在Category Master中添加这两个类别,然后在所需的产品中选择此Internal类别。

您的XML文件:

<record id="category_flooring" model="product.category">
    <field name="name">Flooring</field>
    <field name="type">normal</field>
    <field name="property_cost_method">standard</field>
    <field name="property_valuation">manual_periodic</field>
</record>
<record id="category_carpet" model="product.category">
    <field name="name">Carpet</field>
    <field name="type">normal</field>
    <field name="property_cost_method">standard</field>
    <field name="property_valuation">manual_periodic</field>
</record>
  • 现在您的python代码如下:-
@api.onchange('product_id')
    def _onchange_default_code(self):
        if self.product_id.categ_id.id == self.env.ref('your_module_name.category_flooring').id:
            #  Your code belongs to flooring category
        elif self.product_id.categ_id.id == self.env.ref('your_module_name.category_carpet').id:
            #  Your code belongs to carpet category

答案 1 :(得分:0)

如果我理解正确,您希望根据同一记录的其他字段的值来显示或隐藏某些字段。

为此,请使用表单视图定义上的invisible属性,而不是python函数。我将使用装饰有@api.onchange的python函数来计算依赖于squarebox的其他值。

例如参见第227行周围的addons / sale / views / sale_views.xml:

<field name="validity_date" attrs="{'invisible': [('state', 'in', ['sale', 'done'])]}"/>

以上行将普通英语翻译为:显示validity_date字段,除非state字段已出售或完成。