0

我在 Odoo 中有一个模型来注册一些logs(Log)和一个带有异步函数的助手class(Helper)来接收日志上的一些数据广告寄存器,这个 _job_function 由 Cron Job 调用,如下所示:

class Log(models.Model):
    _name = 'saas.autobackup'
    _description = 'Description'

    field1 = fields.Char()
    field2 = fields.Char()
    field3 = fields.Datetime()

  def _job_function(self):
     helper = Hekper(self, ...) #Function receive self(Log) as parameter
     helper.run()  #call functions

这是助手类:

class Helper():
  def __init__(self, og_obj)
    self.log_obj = log_obj  #Receive the Log object as parameter
 
  async def some_async_func(self):
   (...) #Some async functions to get val1 and val2
   self.create_log(val1,val2)
      
  def create_log(self, val1, val2)
    vals = {'field1': val1, 'field2': val1, 'field3': '2021-01-01'}
    self.log_obj.create(values)

  def run(self):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    future = asyncio.ensure_future(self.some_async_func())
    loop.run_until_complete(future)

为了调试 propuser,我已经覆盖了创建类,以检查我是否发送了错误的数据。当作业执行并调用 create_log 函数时,程序正确进入 create 函数,我还检查了 create 中发送的数据,并验证它们是正确的,就像我在 Odoo 中尝试创建时保留的一样接口本身。“创建”按钮。但是在 Odoo 中通过创建按钮,正常创建并通过 create_log 函数我得到这个错误:

ValueError: <class 'AttributeError'>: "'tuple' object has no attribute 'cache'" while evaluating
4

1 回答 1

1

由于这是一个线程问题,您需要确保创建一个新游标。

    def create_log(self, val1, val2)
        vals = {'field1': val1, 'field2': val1, 'field3': '2021-01-01'}
        with api.Environment.manage():
            with registry(self.env.cr.dbname).cursor() as new_cr:
                new_env = api.Environment(new_cr, self.env.uid, self.env.context)
                self.with_env(new_env).log_obj.create(values)```
于 2021-03-19T20:05:51.353 回答