为什么我得到这个错误?:预计单:spray.action(1,2)
我有一个形式的按钮,单击时应该更新从spray.action
模型数据当前模型mrl
。然后,我做进一步的处理,但它引发错误为什么我得到这个错误?:预计单:spray.action(1,2)
ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: spray.action(1, 2)
@api.multi def mrlCreateSprayRecords(self):
spray_ids = []
vals = []
spray_obj = self.env['spray.action'].search([])
print("spray_obj \n\n\n\t %s ", spray_obj)
for obj in spray_obj:
print("Spray Action Objects \n\n %s \n\t ", obj)
vals = {
'ref': obj.ref,
'farm': obj.farm.farm,
'block': obj.block.block,
'valves': obj.valves.valve,
}
print("Spray Action Data Browse , \n\n\t %s ", vals)
res = super(Mrl, self).create(vals)
res.update(vals)
print("object in mrlCreateSprayRecords \n\n\t %s", res)
return {
'name': 'Update Mrl Operations',
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mrl',
'views': [(spray_obj.id, 'form')],
'view_id': spray_obj.id,
# 'target': 'new',
'res_id': self.id,
'context': self.env.context,
}
回答:
我想你'view_id': spray_obj.id,
必须有写视图id的行中得到的错误。 spray_obj
记录集有很多记录,所以你不能像那样使用它(spray_obj.id
)。您也可以删除view_id
参数以便使用默认视图。
@api.multi def mrlCreateSprayRecords(self):
self.ensure_one()
spray_obj = self.env['spray.action'].search([]) # recordset of all records of the model????
for obj in spray_obj:
vals = {
'ref': obj.ref,
'farm': obj.farm.farm,
'block': obj.block.block,
'valves': obj.valves.valve,
}
self.create(vals)
view_id = self.env.ref('module.xml_view_id').id
return {
'name': 'Update Mrl Operations',
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mrl',
'view_id': view_id,
'res_id': self.id,
'context': self.env.context,
}
我已经加入self.ensure_one()
,因为res_id
必须只有一个ID为好。
我删除res.update(vals)
线,因为它没有任何意义,我哈哈
更多的事情
而是打印的,你应该使用记录器:
import logging _logger = logging.getLogger(__name__)
_logger.info('Hello')
相反,行res = super(Mrl, self).create(vals)
我认为你应该使用这一个
res = self.create(vals) # if you are in the mrl model
回答:
总之,当您访问包含多条记录的recordSet的字段direclty时,会出现此类错误。
您对搜索returnd 2记录spray.action执行搜索(1, 2)
所以,当你做spray_obj.id
odoo会感到困惑什么ID,他应该返回1或2,而这里odoo抛出这个错误。
所以不要访问一个字段的搜索结果,或x2many fiels他们可能有多个记录里面。
@ChesuCR有所改善你的代码并纠正它
以上是 为什么我得到这个错误?:预计单:spray.action(1,2) 的全部内容, 来源链接: utcz.com/qa/258038.html