Динамически генерировать модельные ряды в odoo - PullRequest
0 голосов
/ 18 февраля 2020

Можно ли сделать древовидное представление и использовать 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.

спасибо.

1 Ответ

0 голосов
/ 19 февраля 2020

Простые представления автоматически обновляются: система позволяет использовать операторы INSERT, UPDATE и DELETE в представлении так же, как в обычной таблице. Представление автоматически обновляется , если оно удовлетворяет всем следующим условиям:

  • Представление должно иметь ровно одну запись в своем списке FROM, который должен быть таблица или другое обновляемое представление.

  • Определение представления не должно содержать предложений WITH, DISTINCT, GROUP BY, HAVING, LIMIT или OFFSET в верхний уровень.

  • Определение представления не должно содержать операций над множествами (UNION, INTERSECT или EXCEPT) на верхнем уровне.

  • Список выбора представления не должен содержать никаких агрегатов, оконных функций или функций, возвращающих множество.

Как это работает :

Автоматически обновляемое представление может содержать сочетание обновляемых и не обновляемых столбцов. Столбец является обновляемым, если он является простой ссылкой на обновляемый столбец базового базового отношения; в противном случае столбец доступен только для чтения, и возникнет ошибка, если оператор INSERT или UPDATE попытается присвоить ему значение.

Если представление автоматически обновляется, система преобразует любые INSERT, UPDATE или Оператор DELETE для представления соответствующего оператора базового отношения. Операторы INSERT, имеющие предложение ON CONFLICT UPDATE, полностью поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...