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文は、データベースの書き込み操作をトリガーするため、一般的には次のように使用されます.
の書き方です.
三:環境
1:操作キャッシュ
環境にはモデルのキャッシュ・レコード・セットが格納されているため、環境を使用してレコードを取得、追加、変更、削除し、データベースの変更をトリガーしてデータベースを操作できます.
例:新規レコード
2:ユーザー権限の変更
私たちはselfを通過することができます.sudo()はスーパー権限を取得し、私たちの操作が可能であることを確認します.
3:現在のユーザーへのアクセス
4:XMLのID取得
5:キャッシュの更新、データベース操作のトリガー
四:self常用インタフェース
1:通常クエリー:レコードセットを返し、その後、レコード値を変更してデータベースの変更をトリガーします.
2:読み取り専用クエリー:リストを返します.コンテンツのみ抽出できます.データベースの変更はトリガーできません.
3:統計数:条件を満たすレコード数を返します.
4:ブラウズ:一連のid値により、対応するレコードセットを返す
5:削除
五:NEW ids
Odooは新しいレコードを作成するときにmodelsを使用します.idsはレコードidを仮想化します.
に合格
判断を下す.
六、データベースクエリー
一: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