2012-02-21 22 views

Trả lời

35

Dưới đây là một ví dụ từ stock module:

  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) 

Trường invoice_line_tax_id là một mối quan hệ nhiều-nhiều, và (6, 0, tax_ids) nghĩa để thay thế bất kỳ bản ghi hiện có với những người trong tax_ids. Bởi vì bạn đang gọi create(), không có gì để thay thế.

Danh sách đầy đủ các tùy chọn nằm trong số documentation for the osv class.

Đối với trường nhiều2many, danh sách các bộ dữ liệu được mong đợi. Dưới đây là danh sách các tuple được chấp nhận, với ngữ nghĩa tương ứng

(0, 0, { values }) liên kết đến một kỷ lục mới mà cần phải được tạo ra với các giá trị cho từ điển

(1, ID, { values }) cập nhật các bản ghi liên kết với id = ID (viết đánh giá cao vào nó)

(2, ID) remove và xóa các bản ghi liên kết với id = ID (cuộc gọi bỏ liên kết trên ID, mà sẽ xóa các đối tượng hoàn toàn, và các liên kết đến nó cũng)

(3, ID) cắt liên kết đến các kỷ lục liên kết với id = ID (xóa các mối quan hệ giữa hai đối tượng nhưng không xóa các đối tượng mục tiêu riêng của mình)

(4, ID) liên kết đến kỷ lục hiện tại với id = ID (thêm một mối quan hệ)

(5) bỏ liên kết tất cả (như sử dụng (3, ID) cho tất cả các hồ sơ liên quan)

(6, 0, [IDs]) thay thế danh sách các ID liên kết (như sử dụng (5) sau đó (4, ID) cho mỗi ID trong danh sách các ID)

+0

Nhưng tôi không biết tên đối tượng của bảng rel2 many2many ... Điều đó có nghĩa là tôi có thể xem bảng hai cột đó trong cơ sở dữ liệu, nhưng tôi không biết cách lấy nó qua http.request. registry []. Bạn có biết làm thế nào? –

0

Chỉ cần đặt lĩnh vực many2many của bạn theo quan điểm (file xml) và sau khi chạy mô-đun của bạn, bạn có thể thấy lĩnh vực many2many để chèn các bản ghi trong gui bạn

+0

chúng ta có thể thêm danh sách vào thông số vals trong 'create (self, cr, user, vals, context = None):' để chèn nhiều bản ghi cùng một lúc.? –

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 

Bạn có thể chèn giá trị vào một nhiều-nhiều bảng quan hệ trong OpenERP, hãy nhìn vào ví dụ trên

2

Khi chúng ta tạo ra các lĩnh vực many2many thì chúng ta sử dụng cú pháp sau:

'field_name':fields.many2many('Module_name','relation_name','self_id','module_name_id','string', 

Bây giờ u cần phải chèn vào mối quan hệ này bằng cách thực hiện các truy vấn như:

$ cr.execute('insert into relation_name (self_id,module_name_id) values(%s,%s)',(first_value,second_value) 
Các vấn đề liên quan