2

こんにちは、Python を使用して OpenERP モジュールの開発に取り組んでいます。私はソースコードを調べていて、それを理解するのに問題があります。self.browse がパラメーターとして id、uid を持ち、関数を使用してツールを使用する次の 2 行を理解できません

  for obj in self.browse(cr, uid, ids, context=context):

           result[obj.id] = tools.image_get_resized_images(obj.image)

これについて少しノウハウを教えてください。提案をありがとう

4

2 に答える 2

4

簡単に言えば、データベース テーブル レコードに対する操作browseを可能にするメソッドです。メソッド レコードをオブジェクトとしてフェッチし、ドット表記を使用してフィールドと関係を参照できるようにします。OpenERP プログラミングを OOP に近づけます。readbrowse

OpenERP フレームワークは、ORM および MVC デザイン パターンを使用して Python プログラミングでコード化されています。ORM は use 値を Object にラップし、さまざまなメソッド、つまりURLで CRUD 操作メソッドを許可します。メソッドは、read が dict の Python リストを返し、browse がオブジェクトのリストを返し、各オブジェクトがデータベースのレコードでreadあるメソッドの代替です。browse

したがって、コードの分析は次のとおりです。このステートメント for obj in self.browse(cr, uid, ids, context=context):は行に分割できます。1. self.browse(cr, uid, ids, context=context) は、self(object) からレコード (id) を取得します。2. for は上記の return をループしています。したがって、ループするたびに、obj基本的にdbレコードであるレコードを保存し、レコードとオブジェクトであるため、タブレット列の値を属性として側面にラップするため、obj.field_nameを使用してフィールド値を取得できます

これが役立つことを願っています。

于 2013-10-07T13:31:19.600 に答える
1

Firebug の回答のように、ブラウズは読み取りまたは簡単に言えば、SQL 選択ステートメントと考えることができますが、いくつかの違いがあります。技術的には、これらは ORM モデルによって定義されたデータのインスタンスを表します。product.product はモデル (またはテーブル) を定義し、ブラウズ レコードはテーブルからのデータの行です。

Browse は、単一の ID (例: 1) を取得して閲覧レコードを返すか、ID のリストを取得[1,2,3...]して閲覧レコードのリストを返します。

最終的にはデータベースから読み取りますが、読み取りでは行われない他のいくつかのことも行います。

  1. キャッシング
  2. 任意の深さへの遅延読み込み ( sale_order_line.sale_order.partner.email)
  3. 機能フィールド、関係フィールド (many2one、one2many)、関連フィールドなどの仮想フィールドを処理します。

select * from my_table where id = %s最も単純な意味では、結果からオブジェクトを組み立てると考えてください。

注意すべき点がいくつかあります。

  1. ブラウズ レコードには常に ID があります。product.id
  2. ブラウズ レコードをクライアントに渡すことはできません。データベースカーソルを遅延ロードして保持しようとすると、「閉じられた後に使用されるカーソル」というメッセージが表示されます。
  3. 欠落しているレコードの参照をうまく処理できません。参照しているレコードが存在することを確認してください。通常、これは気にする必要はありませんが、確認する必要がある場合は検索してください。
  4. ブラウズレコードが実装され__eq__ているので、行くことができif product_browse_record == other_product_browse_record、機能します。
  5. 非常に一般的なパターンは、上記のとおりです。

    for product in product_model.browse(cr, uid, ids, context = context): 私の製品で何かをする

これは 100 回のうち 99 回は問題ありませんが、一度にすべてのデータベース レコードを読み取り、オブジェクトのリストを作成することに注意してください。ID のリストが膨大な場合は、大量のメモリを使用します。

于 2013-10-08T08:48:19.597 に答える