2016-06-23 9 views
0

Iましたエラー:例外TypeError:odooの例外TypeError:検索は、()かかり、少なくとも4つの引数(与えられた2)

def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False): 
    order='complete_name' 
    for index, expr in enumerate(args): 
     if expr[1] in ['like', 'ilike', 'not ilike', 'not like', '=like']: 
      args[index][2] = re.sub(r"\s+", '%', expr[2]) 
    return super(stock_location, self).search(cr, uid, args, offset, limit, order, context, count) 
:検索は、()この関数で、少なくとも4つの引数(与えられた2)

を取ります上

pickings = self.env['stock.picking'].search([('picking_type_id.id','=',picking_type_id),('state','=','assigned')]) 

は私がself.envが、何か間違ったことで、新しいAPIには、この機能を変更しようとしました。

def search(self, args, offset=0, limit=None, order=None, context=None, count=False): 
     order='complete_name' 
     for index, expr in enumerate(args): 
      if expr[1] in ['like', 'ilike', 'not ilike', 'not like', '=like']: 
       args[index][2] = re.sub(r"\s+", '%', expr[2]) 
     return super(stock_location, self).search(self.env, args, offset, limit, order, context, count 

) 

関数 'def search'は、stock_location(models.Model)クラスで使用されます。だから私は古いAPIから新しいAPIにこの機能を変更しようとしました。

def _compute_can_validate(self): 
     user_is_admin = self.env.user._is_admin() 
     user_is_network_manager = self.user_has_groups('stock.group_stock_network_manager') 
     owned_locations = [] 
     if user_is_network_manager: 
     owned_locations = self.env['stock.location'].search([('user_ids','in',self.env.user.id), 
                  ('type_id.code','=','network')]) 
+0

しかし、あなたは、あなたが渡していると、クラスのインスタンスを使用すると、2つのだけの引数を渡している意味 'list'実現。あなたは何をしようとしているのですか? –

+0

私は、関数def検索をself.envで新しいapiに変更する必要はないと言いたいのですか?問題はこのためではありませんか? – fueggit

+0

は、あなたも使用されていないCRとのuidパラメータを持っている...それらを削除し、それが –

答えて

-1
def search(self, *args, **kwargs): 
    # -> cr, uid??? what are these parameters for? You are not using them at all... 
    offset = kwargs.get("offset", 0) 
    limit = kwargs.get("limit", None) 
    order = kwargs.get("order", 'complete_name') 
    context = kwargs.get("context", None) 
    count = kwargs.get("count", False) 
    for index, expr in enumerate(args): 
     if expr[1] in ['like', 'ilike', 'not ilike', 'not like', '=like']: 
      args[index][2] = re.sub(r"\s+", '%', expr[2]) 
    return super(stock_location, self).search(*args, **kwargs) 

そして呼び出す:

pickings = self.env['stock.picking'].search(('picking_type_id.id','=',picking_type_id),('state','=','assigned')) 

それが今で動作するかどうかを確認pickingsを検索するために私は、この機能を使用しています。あなたは唯一の2つのパラメータを渡していると、この方法は、少なくとも4つのパラメータはに関連している「自己」、に関連している期待し...あなたはパラメータを渡す方法で

を本当の混乱を作成していますクラスオブジェクトインスタンス。次に、あなたは3つの他のパラメータを使用していますが、使用していないように見えます。そして、メソッドの呼び出し時に実際に渡している唯一の引数のリストがあります.... kwargsを使用すると、あなたより良いスーパー(stock_location、自己).search一部を含むアイデアを、実装する...

+0

ありがとうございます!今、私は分かる。できます。今度は別のエラーがあります:もしexpr [1]が['like'、 'ilike'、 'not ilike'、 'not like'、 '= like']なら。 TypeError: 'Cursor'オブジェクトはインデックス作成をサポートしていません。私はさらに進んで、これを引き起こす問題を調べようとします。 – fueggit

+0

申し訳ありませんが、それは正しい答えではありません。彼は古いAPIに直面しています。新しいAPIの問題です。 OdooはORMメソッドの呼び出しを、パラメータを使用する明確な方法に切り替えました。そこで、cr、uid、contextなどのデフォルトパラメータを 'self.env'にカプセル化しました。 Odooは古いコードとの互換性を保つために、両方の方法を並行して使用するため、これはラッパーによって行われなければなりません。私は後で答えを出そうとします。 – CZoellner

+0

@CZoellner、これは正解です。これはTypeErrorに関連する問題を解決しています。 APIに他の問題がある場合は、別のトピックです。しかし、彼の問題を完全に解決するより完全な答えを自由に提供してください。 –

関連する問題