如何使用sudo()获取onchange中的值

时间:2019-04-10 09:47:39

标签: odoo onchange

我添加了一个onchange方法,该onchange方法在访问many2one字段时使用了sudo()。

但是使用sudo()时,我无法使用sudo获取记录的值。 因此,如何使用sudo()获取onchange记录(<odoo.models.NewId object at 0x7fba62f7b3d8>)的值。

以下是示例代码:

@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 :(得分:0)

这是因为记录集在当前事务之外不存在。这样您当前的用户可以看到内容,而其他用户则看不到。

代码对我来说看起来不错,实际上,如果您看到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