Many2many Odoo(元Openerp)に挿入する
-
28-10-2019 - |
質問
Odoo(以前のOpenerp)のMany2manyまたはOne2manhy関係テーブルに値を挿入しようとしています。これを行う方法がわかりますか?
解決
以下の例は次のとおりです ストックモジュール:
invoice_line_id = invoice_line_obj.create(cursor, user, {
'name': name,
'origin': origin,
'invoice_id': invoice_id,
'uos_id': uos_id,
'product_id': move_line.product_id.id,
'account_id': account_id,
'price_unit': price_unit,
'discount': discount,
'quantity': move_line.product_uos_qty or move_line.product_qty,
'invoice_line_tax_id': [(6, 0, tax_ids)],
'account_analytic_id': account_analytic_id,
}, context=context)
self._invoice_line_hook(cursor, user, move_line, invoice_line_id)
invoice_line_tax_id
フィールドは多くの関係です (6, 0, tax_ids)
既存のレコードをINに置き換えることを意味します tax_ids
. 。あなたが呼んでいるからです create()
, 、置き換えるものは何もありません。
オプションの完全なリストがあります OSVクラスのドキュメント.
多くの数manyフィールドの場合、タプルのリストが予想されます。これが、対応するセマンティクスを含む受け入れられているタプルのリストです
(0, 0, { values })
指定された値辞書で作成する必要がある新しいレコードへのリンク
(1, ID, { values })
id = id(write 値 その上)
(2, ID)
リンクされたレコードを削除して削除してid = id(idでlink linkを呼び出し、オブジェクトが完全に削除され、リンクも削除します)
(3, ID)
ID = IDでリンクされたレコードへのリンクをカットします(2つのオブジェクト間の関係を削除しますが、ターゲットオブジェクト自体を削除しません)
(4, ID)
ID = IDを使用して既存のレコードへのリンク(関係を追加)
(5)
すべてのリンクを解除する(すべてのリンクされたレコードに(3、ID)を使用するなど)
(6, 0, [IDs])
リンクされたIDのリストを置き換えます(IDのリストの各IDに(5)then(4、ID)を使用するなど)
他のヒント
def list_customers(self, cr, uid, ids, context):
sale_obj = self.pool.get('sale.order')
for sale in self.browse(cr, uid, ids, context):
sale_ids = sale_obj.search(cr, uid, [('div_code_id','=',sale.div_code_id.id),('project_user','=',sale.project_id.id),('tower_id','=',sale.tower_id.id)])
ids_cus = []
for cus in sale_obj.browse(cr, uid, sale_ids, context):
if cus.partner_id.id not in ids_cus:
ids_cus.append(cus.partner_id.id)
self.write(cr, uid, ids, {'state_readonly':'listed','customer_ids': [(6, 0, ids_cus)]})
return True
OpenerPの多目的関係テーブルに値を挿入できます。上記の例をご覧ください
Many2manyフィールドを作成するとき、この構文を使用しました。
'field_name':fields.many2many('Module_name','relation_name','self_id','module_name_id','string',
次のようにクエリを実行して、この関係に挿入する必要があります。
$ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value)
Many2manyフィールドを表示(xmlファイル)に配置するだけで、モジュールを実行した後、GUIにレコードを挿入するためにMany2manyフィールドが表示されます