2017-12-02 10 views
2

クリックすると、現在のモデルmrlspray.actionモデルのデータで更新するはずのボタンがあります。それから私は、さらなる処理を行うが、それは、私はあなたがそこにビューIDを記述する必要があります'view_id': spray_obj.id,行でエラーを取得していると思うこのエラーが発生するのはなぜですか?予想されるシングルトン: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']。search([]、limit = 1) –

答えて

4

エラーが発生します。 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, 
    } 

res_idは同様にのみ1つのIDである必要がありますので、私はself.ensure_one()を追加しました。

それが笑私に

もっと物事あなたがロガーを使用する必要があります代わりに、印刷の

どんな意味がないので、私はres.update(vals)行を削除します:代わりに

import logging 
_logger = logging.getLogger(__name__) 

_logger.info('Hello') 

ラインres = super(Mrl, self).create(vals)私はあなたがこの1つを使うべきだと思います。

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

要するに、複数のレコードを含むrecordSetのフィールドdirecltyにアクセスすると、この種のエラーが発生します。

あなたがreturnd 2レコードの検索spray.action上で検索を実行し (1, 2)

ですから、spray_obj.id odooは、彼がこのエラーをスローodooここで1または2を返し、どうあるべきかのid混同されることになる行うとき。

フィールドに検索結果を表示したり、複数のレコードに複数のレコードが含まれていることがあります。

@ChesuCRはあなたのコードを改善して、それが

関連する問題