Python 序列项0:应为str实例,找到bool(Odoo 14)

Python 序列项0:应为str实例,找到bool(Odoo 14),python,odoo,Python,Odoo,我在“获取报告”值中遇到错误 映射(lambda x:x.ref,docs.account_invoice_id))或“,”.连接( TypeError:序列项0:应为str实例,找到bool” 有什么帮助吗?很抱歉,我没有太多关于您试图做什么的信息,但这可能是一个解决方案: data['test']=','.join(映射(lambda x:x.reference,docs.acc))如果docs.type=='type1'else','.join(映射(lambda x:x.name,doc

我在“获取报告”值中遇到错误 映射(lambda x:x.ref,docs.account_invoice_id))或“,”.连接( TypeError:序列项0:应为str实例,找到bool”


有什么帮助吗?

很抱歉,我没有太多关于您试图做什么的信息,但这可能是一个解决方案:

data['test']=','.join(映射(lambda x:x.reference,docs.acc))如果docs.type=='type1'else','.join(映射(lambda x:x.name,docs.acc))
如果文档类型为
type1
则使用此语法加入
x.reference
,否则加入
x.name

编辑: 正如@sabik指出的,您还可以使用生成器而不是map函数简化语句。 如果整个集合的文档类型相同,则可以通过以下方式简化语句:

data['test']=','.join(docs.acc中x的x.reference)如果docs.type=='type1'else','.join(docs.acc中x的x.name)
此外,为了便于阅读,您还可以尝试以下方法:

doc\u attr=“reference”if docs.type==“type1”else“name”
数据[“test”]=“,”.join(docs.acc中x的getattr(x,doc\u attr)
否则,如果每个“x”的类型发生更改,则可以使用

data['test']=','.join(如果x.type=='type1'或者docs.acc中x的x.name,则x.reference)

错误跟踪和更清晰的代码片段可能会有所帮助。顺便说一句,
数据['test']
您正在分配布尔值。是否确实需要布尔值而不是字符串,如错误所述?@Valerio Preti,我需要字符串而不是布尔值,如何修复它?谢谢。一个格式说明,将表达式拆分为逻辑块而不是任意拆分是个好主意。在这种情况下,这意味着enclo在一对额外的括号中唱出整首歌,然后打断
前面的行。我们可以通过将
map
函数重写为生成器表达式来进一步简化这一过程:
data['test']=','.join(docs.acc中x的x.reference)if docs.type=='type1'else','.join(docs.acc中x的x.name)
这是假设
.type
字段确实在整个集合中,而不是在每个单独的项目上;如果它在每个单独的项目上,则类似于:
数据['test']=','.join(x.reference如果x.type='type1',否则x.name代表docs.acc中的x)
data['test'] = docs.type == 'type1' and ', '.join(
            map(lambda x: x.reference, docs.acc)) or ', '.join(
            map(lambda x: x.name, docs.acc))