odooにおけるselfの使用

3323 ワード

記事の転載先:https://www.cnblogs.com/zcy1103/p/8483646.html 
 
一:selfとは何か
現在新版のOdooで使用されているselfは、カーソルcr、ユーザID、モデル、コンテキスト、レコードセット、キャッシュのパッケージです.
私たちはselfを通過することができます.XXはこれらのパッケージを取得しました.例えば、self.cr、self.uid.
 
二:属性を直接設定することでデータベース内のフィールド値を変更する
あるモデルの記録を調べた後、recordを通過することができます.XX=valueは、レコードのフィールド内容を直接変更します.
同様に、モデルを書き換えるwrite法においてもself.XX=valueは、新規レコードのフィールドの値を指定します.
ここで注意しなければならないのは2つです.
1:検出されたレコードフィールドの値を変更してデータベースの内容を変更することは,キャッシュ内の値を変更してデータベースからレコードを書くことによって達成される.
2:writeメソッドを書き換える場合、writeメソッドでselfが呼び出されるごとに.XX=value文は、データベースの書き込み操作をトリガーするため、一般的には次のように使用されます.
for rec in self:
    rec.XX = XX

の書き方です.
 
三:環境
1:操作キャッシュ
環境にはモデルのキャッシュ・レコード・セットが格納されているため、環境を使用してレコードを取得、追加、変更、削除し、データベースの変更をトリガーしてデータベースを操作できます.
例:新規レコード
self.env['  '].create(vals)

      
2:ユーザー権限の変更
私たちはselfを通過することができます.sudo()はスーパー権限を取得し、私たちの操作が可能であることを確認します.
self.env[‘model'].sudo().create(vals)

    
3:現在のユーザーへのアクセス
self.env.user

 
4:XMLのID取得
self.env.ref('external id')

 
5:キャッシュの更新、データベース操作のトリガー
self.env.invalidate_all()

 
四:self常用インタフェース
1:通常クエリー:レコードセットを返し、その後、レコード値を変更してデータベースの変更をトリガーします.
self.search(domain) //      self   
self.env['model'].search(domain) //     model   ,        

 
2:読み取り専用クエリー:リストを返します.コンテンツのみ抽出できます.データベースの変更はトリガーできません.
self.search_read([],['      '])

 
3:統計数:条件を満たすレコード数を返します.
self.search_count(domain)

    
4:ブラウズ:一連のid値により、対応するレコードセットを返す
self.browse([id])

  
5:削除
self.unlink(domain)

 
五:NEW ids
Odooは新しいレコードを作成するときにmodelsを使用します.idsはレコードidを仮想化します.
に合格
if is instance(record.id,models.NewId):

判断を下す.
六、データベースクエリー
 
import psycopg2
 
 
 
class XXXXX(models.Model):
 
........
 
 
 
@api.multi
 
def OOOO(self):
 
db = psycopg2.connect("dbname=test4 user=postgres")#     test4      postgres            
 
vals = db.cursor()
 
vals.execute("SELECT sales,prices,sale_date FROM run_chart")#  sql      
 
tables = vals.fetchall()#      
 
 
 
#  
 
sql = "select *from   "
 
self.env.cr.execute(sql) #  SQL  
 
dicts = self.env.cr.dictfetchall() #  SQL