Как получить значения в onchange с помощью sudo () - PullRequest
1 голос
/ 10 апреля 2019

Я добавил один метод onchange, в этом методе onchange я использовал sudo () при доступе к полю many2one.

Но с помощью sudo () я не могу получить значения записи с помощью sudo. Так как я могу получить значения записи onchange (<odoo.models.NewId object at 0x7fba62f7b3d8>) с помощью sudo ().

Вот пример кода:

@api.onchange('product_id')
    def onchange_product_id(self):
        for record in self:
            print(record.product_id)
            print(record.sudo().product_id)

Фактический результат:

product.product(13,)
product.product()

Ожидаемый результат:

product.product(13,)
product.product(13,)

1 Ответ

0 голосов
/ 10 апреля 2019

Это потому, что набор записей не существует вне текущей транзакции. Таким образом, ваш текущий пользователь может видеть содержимое, но другие пользователи не могут.

Код выглядит хорошо для меня, на самом деле, если вы увидите path_to_v12/addons/hr_expense/models/hr_expense.py строки 563-567, вы увидите похожий код:

@api.onchange('employee_id')
def _onchange_employee_id(self):
    self.address_id = self.employee_id.sudo().address_home_id
    self.department_id = self.employee_id.department_id
    self.user_id = self.employee_id.expense_manager_id or 
    self.employee_id.parent_id.user_id
...