как обновить не обновляемый вид? - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю над odoo version11. Я создал представление с именем test.Я обновил модуль.Позже мне нужно внести некоторые изменения, включая изменение некоторых значений и удаление некоторых значений. Когда я пытаюсь обновить модуль, я получаю сообщение об ошибке

psycopg2.OperationalError: невозможно удалить из представления "test" ПОДРОБНЕЕ: Представления, содержащие GROUP BYне обновляются автоматически.СОВЕТ: Чтобы включить удаление из представления, предоставьте триггер INSTEAD OF DELETE или безусловное правило ON DELETE DO INSTEAD.

Как предоставить правило?Мой код выглядит следующим образом:

@api.model_cr
def init(self):
    cr = self.env.cr   
    tools.drop_view_if_exists(cr, 'o_test')
    cr.execute("""

                CREATE or replace view o_test as 
                (
                    SELECT 
                        mve.id as id,
                        acc.code as account_code,
                        SUM (mve.debit-mve.credit) AS balance,
                        mve.account_id as account_id
                    FROM account_move_line mve
                    LEFT JOIN account_account acc ON mve.account_id = acc.id 
                    GROUP BY mve.id,mve.account_id,acc.code
                )
            """)

Я хочу изменить код следующим образом:

@api.model_cr
def init(self):
    cr = self.env.cr   
    tools.drop_view_if_exists(cr, 'o_test')
    cr.execute("""

                CREATE or replace view o_test as 
                (
                    SELECT 
                        mve.account_id as id,
                        acc.code as account_code,
                        SUM (mve.debit-mve.credit) AS balance,
                        mve.account_id as account_id
                    FROM account_move_line mve
                    LEFT JOIN account_account acc ON mve.account_id = acc.id 
                    GROUP BY mve.account_id,acc.code
                )
            """)

1 Ответ

0 голосов
/ 15 сентября 2018

Редактируемые представления могут быть созданы в Postgres с использованием правил, и предложение GROUP BY не должно быть проблемой.Вы можете написать правило, как показано ниже для обновления запроса.Здесь я обновил только один столбец

CREATE OR REPLACE RULE update_o_test AS
    ON UPDATE TO o_test
    DO INSTEAD
 UPDATE account_account SET code = new.code
  WHERE account_account.id = old.id;

Аналогичным образом вы можете создавать правила для операций вставки и удаления.Добавление правил после завершения оператора создания представления должно работать.Надеюсь, это поможет ...

...