2017-07-19 10 views
3

Odoo 10-eでは、クエリを実行して結果のリストまたはタプルをpythonオブジェクトにキャストできます。上記のクエリのようにOdoo - レコードをフェッチしてPythonオブジェクトにキャスト

self.env.cr.execute("SELECT * FROM res.users WHERE Id = 1") 

それが今、このクエリは、ユーザーのリストを返します

self.env.cr.execute("SELECT * FROM res.users") 

単一のレコードを返します。今すぐself.env.cr.fetchall()に結果を単一のユーザーオブジェクトまたはユーザーリストとして伝える方法はありますか。そうでなければ、フェッチした後にキャストできますか?

+0

代わりにORMレイヤーを使用しないのはなぜですか?申し訳ありませんが、このような例でORMレイヤーをバイパスする必要はありません。 – CZoellner

+0

@CZoellner実際に私はOdooを初めて使っています。私はORMでそれらを取り込むことができません。 – Ancient

答えて

2

これらの単純なクエリにORMレイヤを使用するだけです。このため、いくつかの簡単な方法(一般的なCRUD-用などには、作成、読み取り、更新、削除>)があります

作成 - >作成(ヴァルス)

# creates a user in db and 
# returns this user as python object (RecordSet) 
created_user = self.env['res.users'].create({'name': 'New User'}) 

ブラウズ - >ブラウズを( list_of_ids)

# reads the whole database rows and 
# returns python objects (RecordSet) 
browsed_users = self.env['res.users'].browse([1,2]) 

検索 - >検索(ドメイン)

# search database with Odoo's domain syntax 
# returns python objects if something were found 
domain = [('name', '=', 'New User')] 
searched_users = self.env['res.users'].search(domain) 

例は表面に触れるだけです。詳細についてはOdoo's Developer Documentationを参照してください。

編集:ORMレイヤーを使用すると長所と短所があります。しかし、Odooのコンテキストでは、本当に大きな利点があります:レイヤーにはユーザーアクセス制御が統合されています。それはただの大きな利点です。

-1

結果をpython listオブジェクトで取得する方法があります。

qry = """select id from res_partner where parent_id is Null;""" 
    self._cr.execute(qry) 
    result = self._cr.dictfetchall() 
    user_ids=[] 
    for ids in result: 
     user_ids.append(ids.get('id')) 

user_ids変数では、すべてのres.partnerのIDを取得します。

1

あなたは、以下の方法でそれを取得することができます。

q = "select * from res_users where id = 1" 
#q = "select * from res_users" 
self.env.cr.execute(q) 
res = self.env.cr.dictfetchall() 
users = self.env['res.users'].browse([row['id'] for row in res]) 

ゲットdictfetchallとのデータ()とブラウズ()メソッドは、ユーザーのレコードセットを取得使用して。

これはあなたを助けるかもしれません。

+0

これはうまく見えます。この 'browse'でさらに何かできますか?どのようにして 'Group 1'にいるユーザだけができますか? 「グループ1」が有効なユーザであり、そのグループにいくつかのユーザがいると仮定すると – Ancient

関連する問題