ORMのodoo内部のいくつかの操作

ケース0001
sale_obj = self.env [ 'sale.order']。ブラウズ(K)
によって参照を見つけるオブジェクトは

sale_obj.name内部オブジェクトを見つけます

browse

IdがデータベースまたはIDのリストを取得し、外部から(例えば、外部システム往復で)レコードID Odooを取得するときに、レコードセットを返すか、古いAPIでメソッドを呼び出して、それが役立つことができます:

>>> self.browse([7, 18, 12])
res.partner(7, 18, 12)

exists()

これは、データベースに存在するレコードだけを含む新しいレコードセットを返します。まだ存在している(たとえば、外部からのアクセスなど)の記録をチェックするために使用することができます。

if not record.exists():
    raise Exception("The record has been deleted")

またはメソッドを呼び出すとした後、レコードの一部を削除することができます。

records.may_remove_some()
# only keep records which were not deleted
records = records.exists()

ref()

環境この方法は、外部整合を備えたレコード(外部ID)IDを返します。

>>> env.ref('base.group_public')
res.groups(2)

ensure_one()

チェックしたレコードセットが単一の場合(1つのレコードのみが含まれている)、それ以外の場合はエラーではありません。

records.ensure_one()
# is equivalent to but clearer than:
assert len(records) == 1, "Expected singleton"


ケース0002

filtered()

提供アサーションを満たすレコードだけを含むレコードセットを返します。アサーションはまた、真または偽の文字列は、フィールドでフィルタすることができます:

フィルタ条件のセットによって、レコードの生成

# only keep records whose company is the current user's
records.filtered(lambda r: r.company_id == user.company_id)

# only keep records whose partner is a company
records.filtered("partner_id.is_company")

sorted()

レコードセットは、ソートが提供するファンクションキーによって返されました。いいえキー場合は、モデルのデフォルトのソート順を使用します。

# sort records by name
records.sorted(key=lambda r: r.name)

mapped()

記録のそれぞれに設定された機能によって提供されるアプリケーションは、結果が設定されていれば、記録は、レコードのセットを返します。

# returns a list of summing two fields for each record in the set records.mapped(lambda r: r.field1 + r.field2)

この関数は、フィールドの値に対応する文字列を取得するために設けられてもよいです。

# returns a list of names
records.mapped('name')

# returns a recordset of partners
record.mapped('partner_id') # returns the union of all partner banks, with duplicates removed record.mapped('partner_id.bank_ids')


 

計算フィールド(計算フィールド)

 

あなたは使用することができますcompute(代わりに、データベースから直接読み込むの)パラメータ計算フィールドを。計算フィールドに値を割り当てる必要があります。それは別のフィールドの値を使用している場合、それを使用する必要がありdepends()、それらのフィールドを指定します:

 
from odoo import api
total = fields.Float(compute='_compute_total')

@api.depends('value', 'tax')
def _compute_total(self): for record in self: record.total = record.value + record.value * record.tax
 
  • 破線(点線パス)とすることができるサブフィールド依存性を使用する場合のサブフィールドを使用する場合:(依存関係がパスを点在させることができる:)
 
@api.depends('line_ids.value')
def _compute_total(self): for record in self: record.total = sum(line.value for line in record.line_ids)
 
  • 計算され、要求されたときに返されるデフォルトのストレージ、より計算フィールド。設定がstore=True自動的に検索を有効にして、データベースに格納されます
  • また、によって提供され得るsearch可能パラメータ計算フィールド。値メソッドは、ドメイン名を返しています。
 
upper_name = field.Char(compute='_compute_upper', search='_search_upper')

def _search_upper(self, operator, value):
    if operator == 'like': operator = 'ilike' return [('name', operator, value)]
 

おすすめ

転載: www.cnblogs.com/1314520xh/p/11455971.html