为什么上下文 = None?

Why Context = None?

当我使用以下代码时,它工作正常:

def xyz(self, cr, uid, ids, vals, context=None):
    .......
    .......
    self.write(cr, uid, ids, vals, context=context) 

但是当我使用下面的代码时它抛出一个错误:

'NoneType' object is not iterable.

def xyz(self, cr, uid, ids, vals, context=None):
    .......
    .......
    self.write(cr, uid, ids, vals, context=None)

两种方法的参数相同,但写入方法不同。

我没有在这两个代码中更新上下文。

但是第二个抛出错误,为什么?

而且为什么context=None在争论中。

您没有向我们展示您在哪里调用这些函数,很可能您是在使用一些可迭代的上下文调用 xyz。这就是为什么在第一种情况下,上下文不是 None 并且它有效。而在第二种情况下,您没有保留参数中收到的上下文并发送硬编码值 None ,这当然是不可迭代的。不管怎样,你到底想完成什么?你必须做的是 -

xyz(..., context = []) # that's why context is iterable in first case and not second

在第一种情况下,这个 context 不会是 None

有两种不同的东西

def xyz(self, cr, uid, ids, vals, context=None):

它是方法定义,在其中指定参数的默认值,这意味着当您不通过方法调用传递该参数时,它将采用该参数的默认值

Click here查看更多

self.write(cr, uid, ids, vals, context=None)

这种情况定义您在上下文 中传递None。这是关键字参数的概念。

Click here查看更多

def xyz(self, cr, uid, ids, vals, context=None):
    .......
    .......
    self.write(cr, uid, ids, vals, context=context) 

它表明只有当您没有将上下文值传递给该方法XYZ[=44=时,它才会在上下文中采用默认值none ] 并且相同的值将传递给 write 方法,这样它就不会给你一个错误。

context=context 表示上下文具有在调用时分配给上下文参数的值,可能是也可能不是 NONE。尝试在 XYZ 调用中传递 none 会给你同样的错误。

def xyz(self, cr, uid, ids, vals, context=None):
    .......
    .......
    self.write(cr, uid, ids, vals, context=None)

第二,你总是将 none 传递给 write 方法而不是 context=context 所以除了 none.

之外别无他法

一般来说,当你调用任何方法时,永远不要将 None 传递给上下文,只需设置 {}(空白字典),它至少不会给你错误。

最后,您收到此错误的原因是因为在写入方法中某个地方使用了 CONTEXT(实际上已传递 NONE)用于该模型。如果您想知道原因,那么您需要找出所有为该模型重写 write 方法的地方以及使用上下文的地方。