Odoo隐藏计算字段取决于树视图上的条件

时间:2018-04-11 12:54:49

标签: python xml odoo odoo-10 odoo-9

我有Odoo stock addon&#39> view_stock_history_report_tree 视图:

<tree string="Stock Value At Date" create="0" delete="0">
                <field name="location_id" invisible="1"/>
                <field name="product_id" invisible="1"/>
                <field name="move_id"/>
                <field name="company_id" groups="base.group_multi_company"/>
                <field name="date"/>
                <field name="source"/>
                <field name="quantity" sum="# of Products "/>
                <field name="inventory_value" sum="Total Value"/>
            </tree>

如果总和不等于0 ,我想隐藏计算数量字段。我试着通过写:

将一个attrs添加到数量字段
<field name="quantity" sum="# of Products " attrs="{'invisible': [('quantity', '=', 0)]}"/>

但没有任何反应。貌似attrs并不是在这个领域工作。我不明白如何通过使用attrs来达到计算数量字段。

示例:

Example:

我想隐藏 Persona V 分组字段和 Horizo​​n Zero Dawn 分组字段。

1 个答案:

答案 0 :(得分:0)

问题是你在告诉Odoo:

如果列数量等于0,则生成列数invisible的值。

所以你隐藏了该列的所有零。

但首先,看看这个,以防万一:

  

你不能使树视图的列不可见,行为   attrs与表单视图不同。我的意思是,当你   根据条件,添加attrs使字段不可见   两种观点中的行为都不同:

     

表单视图

     

如果满足条件并且该字段必须是不可见的,那么它就是   消失,标签和价值是不可见的。

     

树状视图

     

如果满足条件且该字段必须不可见,则仅   值是不可见的,但不是标签(在本例中是列)。

因此,您始终会看到quantity列,只有一些行会显示空值。

修改

所以我想你想要隐藏 Persona V Horizo​​n Zero Dawn 组,因为他们的记录数量总和为零,不是吗?

然后从树视图的模型继承并修改其read_group方法。这对你有用:

@api.model
def read_group(self, domain, fields, groupby, offset=0, limit=None,
               orderby=False, lazy=True):
    # If user has grouped the tree view by location_id and product_id...
    if u'location_id' in groupby and u'product_id' in groupby:
        ids_to_show = []
        # Put here your code to fill in ids_to_show with the IDs of the records you want to show
        ...
        # Then, make the domain more restrictive:
        domain[0].append([u'id', u'in', [ids_to_show]])
        # The domain will automatically remove the groups with no
        # representation. For example, if the result of ids_to_show is [2, 7, 35],
        # and those three records have as product Last of Us (x2) and Call of
        # Duty, the agrupations of Persona V and Horizon Zero Dawn will be
        # invisible as they don't have records inside.
    return super(YourModel, self).read_group(
        domain, fields, groupby, offset=offset, limit=limit,
        orderby=orderby, lazy=lazy)