29

Odoo (以前の OpenERP) のリレーション テーブル フィールドにMany2many値を挿入しようとしています。One2manyこれを行う方法はありますか?

4

4 に答える 4

54

以下は、ストック モジュールの例です。

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)のレコードを のレコードに置き換える手段tax_idsです。を呼び出しているためcreate()、置き換えるものはありません。

オプションの完全なリストは、osv クラスのドキュメントにあります。

many2many フィールドの場合、タプルのリストが必要です。受け入れられるタプルのリストと、対応するセマンティクスを次に示します。

(0, 0, { values }) 指定された値辞書で作成する必要がある新しいレコードへのリンク

(1, ID, { values }) リンクされたレコードを id = ID で更新します (それにを書き込みます)

(2, ID) id = ID のリンクされたレコードを削除および削除します (ID で unlink を呼び出します。これにより、オブジェクトが完全に削除され、オブジェクトへのリンクも削除されます)。

(3, ID) id = ID のリンクされたレコードへのリンクを切断します (2 つのオブジェクト間の関係を削除しますが、ターゲット オブジェクト自体は削除しません)。

(4, ID) id = ID の既存のレコードへのリンク (関係を追加)

(5) すべてのリンクを解除 (すべてのリンクされたレコードに (3,ID) を使用するなど)

(6, 0, [IDs]) リンクされた ID のリストを置き換えます (ID のリスト内の各 ID に対して (5) を使用してから (4,ID) を使用するなど)。

于 2012-02-22T00:26:16.957 に答える
7
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 の多対多リレーション テーブルに値を挿入できます。上記の例をご覧ください。

于 2012-05-16T06:17:13.097 に答える
3

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)
于 2012-07-28T11:58:40.247 に答える
0

many2many フィールドをビュー (xml ファイル) に配置するだけで、モジュールを実行した後、GUI にレコードを挿入するための many2many フィールドが表示されます。

于 2012-02-24T06:09:35.243 に答える