Python 在odoo中动态生成模型行

Python 在odoo中动态生成模型行,python,orm,odoo,odoo-12,odoo-13,Python,Orm,Odoo,Odoo 12,Odoo 13,是否可以创建树状视图并使用ORM填充它 我知道扩展init函数并使用_cr.execute可以使用sql填充视图,但是否可以使用orm函数和类似搜索的python代码 以下是如何使用sql执行此操作的示例: def init(self, cr): tools.sql.drop_view_if_exists(cr, 'my_report_model') cr.execute(""" CREATE OR REPLACE VIEW my_repo

是否可以创建树状视图并使用ORM填充它

我知道扩展init函数并使用_cr.execute可以使用sql填充视图,但是否可以使用orm函数和类似搜索的python代码

以下是如何使用sql执行此操作的示例:

def init(self, cr):
        tools.sql.drop_view_if_exists(cr, 'my_report_model')
        cr.execute("""
            CREATE OR REPLACE VIEW my_report_model AS (
                SELECT cbl.analytic_account_id AS id,
                    aaap.name AS parent_name,
                    aaa.name AS child_name,
                    cbl.date_from,
                    cbl.date_to,
                    cbl.planned_amount
                FROM crossovered_budget_lines cbl
                INNER JOIN account_analytic_account aaa ON cbl.analytic_account_id = aaa.id
                LEFT OUTER JOIN account_analytic_account aaap ON aaa.parent_id = aaap.id
            )
        """)
但是我想用python而不是sql来实现它


谢谢。

简单视图是可自动更新的:系统将允许在视图上使用与在常规表上相同的
插入
更新
删除
语句。如果视图满足以下所有条件,则该视图为:

  • 视图的
    FROM
    列表中必须只有一个条目,该条目必须是表或其他可更新视图

  • 视图定义不得在顶层包含
    WITH
    DISTINCT
    groupby
    have
    LIMIT
    OFFSET
    子句

  • 视图定义不得包含顶层的集合操作(
    UNION
    INTERSECT
    除外)

  • 视图的选择列表不得包含任何聚合、窗口函数或集合返回函数

它的工作原理

可自动更新的视图可能包含可更新列和不可更新列的混合。如果列是对基础基关系的可更新列的简单引用,则该列是可更新的;否则,该列是只读的,如果INSERT或UPDATE语句试图为其赋值,则会引发错误

如果视图是可自动更新的,系统将把视图上的任何INSERT、UPDATE或DELETE语句转换为基础基关系上的相应语句。完全支持包含ON CONFLICT UPDATE子句的INSERT语句


到目前为止你试过什么?请在您的问题中分享您的努力,并包括当前输出和预期输出。我用一个使用sql的示例更新了问题,我在internet上找不到有关如何执行此操作的信息,并且odoo文档非常基本。您知道视图实际上不是数据库中的表!使用ORM填充视图是什么意思?Create将尝试使用insert查询插入数据。我所说的view是指界面上的odoo树视图。我指的是使用现有模型(例如发票),并在odoo上创建一个树视图,其中列出了一些更改的现有发票。我不需要创建新项目,只需显示现有项目。这是在谈论postgres视图吗?也许我的问题会更清楚,但我说的是这种奥多树视图:这是两种不同的东西。你可以为PostgreSQL视图添加一个,我可以找到如何使用sql创建odoo树视图的指南,但我找不到如何使用Pythonc中的orm函数填充树。你可以更新你的问题并添加你如何使用
\u cr.在
init
方法中执行
?嗨,肯尼,我举了我从这个链接中获得的示例: