2017-12-02 11 views
2

클릭하면 현재 모델 mrlspray.action 모델의 데이터로 업데이트하는 형식의 버튼이 있습니다. 그럼 추가 처리를 할 수 있지만 오류왜이 오류가 발생합니까? : 예상 싱글 톤 : 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, 

    } 
+0

다음에 독자 대답하는 데 도움이 노이즈가 적은 물어보십시오 수정했습니다 P – ChesuCR

+0

그냥 예를 들어, 검색에 제한 = 1을 추가합니다. spray_obj = self.env [ 'spray.action']. 검색 ([], 제한 = 1) –

답변

4

난 당신이보기 ID를 작성해야합니다 'view_id': spray_obj.id, 행에 오류가 있다고 생각를 발생시킵니다. spray_obj 레코드 세트에는 레코드가 많으므로이를 사용할 수 없습니다 (spray_obj.id). 기본보기 사용자에게 view_id 매개 변수를 제거 할 수도 있습니다. res_id뿐만 아니라 하나의 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()을 추가했습니다. 대신

import logging 
_logger = logging.getLogger(__name__) 

_logger.info('Hello') 

:

가 나는 하하 나에게

더 많은 것을 당신이 로거를 사용해야하는 대신 인쇄의

어떤 이해가되지 않기 때문에 res.update(vals) 줄을 제거해야 line res = super(Mrl, self).create(vals) 나는 이걸 사용해야한다고 생각한다.

res = self.create(vals)  # if you are in the mrl model 
2

요약하면 두 개 이상의 레코드가 들어있는 recordSet의 필드 direclty에 액세스 할 때 이런 종류의 오류가 발생합니다.

당신은 returnd이 기록을 검색하려면 spray.action에서 검색을 수행 (1, 2)

그래서 당신은 spray_obj.id odoo 그는이 오류가 발생 odoo 여기에 1 또는 2를 반환해야하고 어떤 ID를 혼동합니다 수행 할 때.

검색 결과에는 필드에 액세스하지 마십시오. 그렇지 않으면 두 개 이상의 레코드가있을 수 있습니다.

@ChesuCR는 코드를 개선하고, 그것은