Odoo 10 为什么会出现此错误?:预期的单例:spray.action(1,2)

Odoo 10 为什么会出现此错误?:预期的单例:spray.action(1,2),odoo-10,odoo-9,odoo,odoo-view,Odoo 10,Odoo 9,Odoo,Odoo View,我有一个按钮,当点击该按钮时,应使用spray.action模型中的数据更新当前模型mrl。然后我进行进一步的处理,但它会引发错误 ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: spray.action(1, 2) @api.multi def mrlCreateSprayRecords(自我): 喷雾器ID=[] VAL=[] spray_obj=self.env['spray.acti

我有一个按钮,当点击该按钮时,应使用
spray.action
模型中的数据更新当前模型
mrl
。然后我进行进一步的处理,但它会引发错误

ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: spray.action(1, 2)
@api.multi
def mrlCreateSprayRecords(自我):
喷雾器ID=[]
VAL=[]
spray_obj=self.env['spray.action'].search([])
打印(“喷洒对象\n\n\n\t%s”,喷洒对象)
对于喷淋式obj中的obj:
打印(“喷洒操作对象\n\n%s\n\t”,obj)
VAL={
“ref”:obj.ref,
“农场”:obj.farm.farm,
“块”:obj.block.block,
“阀门”:obj.valves.valve,
}
打印(“喷洒动作数据浏览,\n\n\t%s”,VAL)
res=超级(Mrl,自我)。创建(VAL)
存储更新(VAL)
打印(“mrlCreateSprayRecords中的对象\n\n\t%s”,res)
返回{
“名称”:“更新Mrl操作”,
'type':'ir.actions.act_window',
“视图类型”:“表单”,
“查看模式”:“表单”,
“资源模型”:“mrl”,
“视图”:[(spray_obj.id,'表单')],
“视图id”:喷洒对象id,
#'目标':'新',
“res_id”:self.id,
“上下文”:self.env.context,
}

我认为您在“视图id”行中遇到了错误:spray\u obj.id,您必须在那里写入视图id。
spray\u obj
记录集有许多记录,因此不能像那样使用它(
spray\u obj.id
)。您还可以删除
view\u id
参数以使用默认视图

@api.multi
def mrlCreateSprayRecords(自我):
self.sure_one()
spray_obj=self.env['spray.action'].search([])#模型所有记录的记录集????
对于喷淋式obj中的obj:
VAL={
“ref”:obj.ref,
“农场”:obj.farm.farm,
“块”:obj.block.block,
“阀门”:obj.valves.valve,
}
自我创建(VAL)
view\u id=self.env.ref('module.xml\u view\u id').id
返回{
“名称”:“更新Mrl操作”,
'type':'ir.actions.act_window',
“视图类型”:“表单”,
“查看模式”:“表单”,
“资源模型”:“mrl”,
“视图id”:视图id,
“res_id”:self.id,
“上下文”:self.env.context,
}
我添加了
self。请确保一个()
,因为
res\u id
也只能是一个id

我已经删除了
res.update(vals)
行,因为它对我来说没有任何意义哈哈

更多东西

您应该使用记录器而不是打印:

导入日志
_logger=logging.getLogger(_名称__)
_logger.info('Hello')
相反,行
res=super(Mrl,self).create(vals)
我认为您应该使用这一行

res=self.create(vals)#如果您在mrl模型中

简而言之,当您访问包含多条记录的记录集的字段目录时,会出现这种错误

您对spray.action执行了搜索,搜索返回了D 2记录
(1,2)

因此,当你做
spray_obj.id
odoo时,他将不知道应该返回什么id 1或2。在这里,奥多抛出了这个错误

因此,不要访问一个字段、搜索结果或多个字段,因为它们可能包含多个记录


@ChesuCR已经改进了您的代码并更正了它

下次尝试以较少的噪音提问以帮助读者回答,请:p只需在搜索中添加limit=1,例如spray_obj=self.env['spray.action'].搜索([],limit=1)