我有一个表单中的按钮,单击时应该使用mrl
模型中的数据更新当前模型spray.action
。然后我做了进一步处理,但它引发了错误
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,
}
答案 0 :(得分:4)
我认为您在行'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
答案 1 :(得分:2)
简而言之,当您访问包含多个记录的recordSet的字段direclty时,会出现此类错误。
您对搜索返回2记录(1, 2)
所以当你做spray_obj.id
时,odoo将会混淆他应该返回1或2的id。这里odoo抛出这个错误。
所以不要在搜索结果中访问字段,或者在x2many fiels中访问它们可能有多个记录。
@ChesuCR改进了您的代码并对其进行了更正