为什么上下文 = 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 方法的地方以及使用上下文的地方。
当我使用以下代码时,它工作正常:
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 方法的地方以及使用上下文的地方。