【问题标题】:Is there a way to dynamically add fields to a tree view in Odoo 11?有没有办法在 Odoo 11 中动态地将字段添加到树视图中?
【发布时间】:2018-11-30 23:48:09
【问题描述】:

我需要在分析帐户的“成本和收入”行中显示每种货币,我需要为每张发票所具有的不同货币动态添加列并在下面显示总计(模仿“金额”列的行为已经存在),有没有办法做到这一点或有类似结果的解决方法?

分析科目行已经存储了原始货币的金额以及转换为公司货币的金额。

我想通过手动为每种货币添加一个字段来避免发疯。

这是一个例子。

【问题讨论】:

  • 列在树视图上是静态的。你可以创建一个单独的计算字段“金额”,返回值应该是一个字符串,所有值连接在一起。这样做的缺点是您无法在底部显示总和。
  • 我在想,也许可以通过发送更多与数据库值混合的手工计算的列来“欺骗”前端?
  • 我认为没有一种简单的方法可以实现这一目标。您还可以创建多个树视图并根据要显示的列显示一个或另一个,但您需要创建所有组合。实际上我会显示所有可能的列,如果当前行没有值,则空间留空
  • 好吧,谢谢,现在我将根据需要添加包含货币的列,也许将未使用的列设置为 invisible 属性。
  • 好吧,如果你想做一些实验,你可以试试这个:在显示树视图之前,你可以调用ir.actions.server并通过python代码修改视图(ir.ui.view)。然后您可以返回ir.action.window 以显示已更新的视图。这可能有效,但您需要更改对该树视图的所有引用并首先将ir.action.server 列在上面。如果您尝试过,或者如果您不明白我在说什么,请告诉我哈哈

标签: python python-2.7 odoo odoo-11 odoo-view


【解决方案1】:

您可以使用fields_view_get 方法从python 代码动态更新视图(在呈现视图之前)。这只是我在 Odoo 中找到的一个示例:

@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
    res = super(MailThread, self).fields_view_get(
        view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu
    )
    if view_type == 'form':
        doc = etree.XML(res['arch'])
        for node in doc.xpath("//field[@name='message_ids']"):
            # the 'Log a note' button is employee only
            options = safe_eval(node.get('options', '{}'))
            is_employee = self.env.user.has_group('base.group_user')
            options['display_log_button'] = is_employee
            # save options on the node
            node.set('options', repr(options))
        res['arch'] = etree.tostring(doc, encoding='unicode')
    return res

将其放入您的模型中。查找带有doc.xpath 的列字段并将其更新为node.set

实际上是胡安·萨尔塞多在评论中所说的

【讨论】: