Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

load value của many2one model

Ảnh đại diện
david

Chào các ACE,
Mình đang xây dựng custom module, đến phần tạo các view (Tree,form), mình không thể load giá trị của view được, cụ thể như sau:
file py
Model A
'F1': fields.char(required=True).
'F2': fields.one2many('model.b','F4','Field 3')

Model b
'F3':fields.char(required=True)
'F4':fields.many2one('model.a','Field 1')

file xml (đính kèm)


Hiện trạng:

khi tạo mới các record trên form b (chức năng create của form view b), có 2 thành phần là textbox F3, select F4. Textbox F3 là mình nhập vào, Select F4 mình chỉ chọn các giá trị như

model.b,1

, hay model.b,2…….(cái này hiện lên là id của model b do system tạo ra)

Mục tiêu

là: tại select F4 mình có thể chọn giá trị từ field F1 (field char).

Quá trình xử lý

: mình tạo event onchange để load giá trị F1 cho F4 cũng không được

def onchange_tram(self, cr, uid, ids, context=None):

if tram_id_on:

tram = self.pool.get('model.a').browse(cr, uid,['F1'], context=context)

return {'value': {'F4': tram.F1}}

return {}

trên file xml: "/field name="F4" onchange="onchange_tram"/"

sau đó mình làm cách khác là tạo function để load giá trị F1 cho F4 (tạo hàm load giá trị, sau đó override _default) cũng không luôn.

ACE giúp mình với, hic hic

P/S: đính kèm hình chụp version Openerp 7 trên windows của mình

123

Ảnh đại diện
Huỷ
3 Trả lời
0
Ảnh đại diện
david
Best Answer
@david,

Thứ 1, bạn chỉ khai báo 'F4':fields.many2one('model.a','Field 1') là đủ, tự động nó sẽ hiển thị dữ liệu từ F1.

Thứ 2, nếu bạn muốn sử dụng onchange trong trường hợp này, bạn phải truyển context của form vào, sau đó update lại context đó.

http://openerpdev.wordpress.com/2012/01/31/openerp-one2many-many2one-fields-example/

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer

@david,

Bạn thử bỏ F2 trong model a đi xem nào. Nếu là mình, mình chỉ sử dụng F4 = fields.many2one(model.a,'F4') là ok.

1 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Chào Leo,
Mình fix được rồi. Cám ơn trời. hic hic.
Mình không biết Leo sử dụng phiên bản nào. Tuy nhiên khi mình thêm _rec_name trong class thì xử lý được.
Mình cũng đang xem thêm. Leo có thể giải thích giúp mình được không?

0
Ảnh đại diện
Leo Tran
Best Answer

@david,

Thứ 1, bạn chỉ khai báo 'F4':fields.many2one('model.a','Field 1') là đủ, tự động nó sẽ hiển thị dữ liệu từ F1.

Thứ 2, nếu bạn muốn sử dụng onchange trong trường hợp này, bạn phải truyển context của form vào, sau đó update lại context đó.

2 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Cám ơn Leo Tran đã trả lời giúp mình
Thứ 1:Mình đã thực hiện theo hướng dẫn đính kèm nhưng nếu code theo ví dụ của hướng dẫn thì OK, còn làm theo cách mình từ đầu đến giờ thì khi click chọn select F4 chỉ toàn là hiện ra modela,1, model a,2,..... thôi. (Mình cùng thực hiện trên 1 server Open thôi). Như vậy là không phải do phiên bản python, phiên bản openerp? Bạn có bao giờ bị giống như mình chưa?
Thứ 2: Bạn giải thích như vậy là mình hiểu rồi, hèn chi khi mình chọn select F4 mà không nhập gì vào thì sau khi onchange nó xóa rỗng hết.

Ảnh đại diện
ViindooBot
-

Chào Leo,
Mình làm đi làm lại nhiều lần rồi, vẵn không thể load value của F1 được.
Theo bạn mình bị lỗi gì vậy?
Giúp mình với

Trả lời của bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.