Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
2 Trả lời
10429 Lượt xem

Hello to all , I have been trying to use a drop down menu list in my openerp module. I have a many2one field containing categories . This field is associated with an onchange function. This onchange function is returning new values to 2nd field. Now everything is working ok but I want to use a dropdown type menu in the 2nd field so that I can select the values from it. My Python code is as follows:

class deg_form(osv.osv):

    _name = "deg.form"
    _columns = {
         'categ1':fields.many2one('product.category','Parent Category',required=True),
         'my_products':fields.char('Product',size=64)

            }

    def Product_Category_OnChange(self,cr,uid,ids,categ1):
            pro_id=[]
            cr.execute('select id,name from product_template where  categ_id in (select id from product_category where parent_id in (select id from product_category where parent_id='+str(categ1)+'))  union select id,name from product_template where  categ_id in (select id from product_category where parent_id='+str(categ1)+') union select id,name from product_template where categ_id='+str(categ1))


    res = cr.fetchall()
    for pid,name in res:
            pro_id.append((pid,name))
        return {'value':{'my_products':pro_id}}

here is my xml code:

 <field name="categ1" on_change="Product_Category_OnChange(categ1)" />

Please help me to achieve this. Thanks n Regards

Ảnh đại diện
Huỷ bỏ

Hello Arsalan, If my ans is correct, then please approve it.

Câu trả lời hay nhất

You don't need to write on change method just remove that method and try below code.

in Python file:

'categ1':fields.many2one('product.category','Parent Category',required=True),
'my_products':fields.many2one('product.product','Product')

and in XML file:

<field name="categ1" on_change="Product_Category_OnChange(categ1)" />
<field name="my_products" domain="[('categ_id','=',categ1)]"/>
Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

Hi,

Try this code '

my_products':fields.many2one('product.product','Product')

def Product_Category_OnChange(self,cr,uid,ids,categ1):
        pro_id=[]
        cr.execute('select id from product_template where  categ_id in (select id from product_category where parent_id in (select id from product_category where parent_id='+str(categ1)+'))  union select id,name from product_template where  categ_id in (select id from product_category where parent_id='+str(categ1)+') union select id,name from product_template where categ_id='+str(categ1))


    res = cr.fetchall()
    for pid in res:
            pro_id.append(pid)
    return {'value':{'my_products':pro_id}}
Ảnh đại diện
Huỷ bỏ
Tác giả

On doing this , I m having error : TypeError: Object [object Array] has no method 'split'

for pid,name in res:
        pro_id.append(pid)  use this code in your onchange function.
Tác giả

Now its giving me this -> TypeError: Object 29 has no method 'split'

have you upgrade your module ??if not then upgrade module and try this

Tác giả

yes I upgraded , but no change

I have update ans pls check it.

Tác giả

yes I tried but getting TypeError: Object 29 has no method 'split'

Hi return {'value':{'my_products':pro_id[0]}} try this.

Tác giả

the error is resolved and I can view the drop down but they are not filtered . It is showing all values of product.product

my_products':fields.many2one('product.product','Product', domain="[('categ_id','=',categ1)]") add this in py file upgrade module it will work.

Tác giả

no , still the values are not filtered . I think product.product will not be there , Since because of product.product its showing all products

Add this in py file 'my_products':fields.many2one('product.product','Product') and add this in xml file <field name="my_products" domain="[('categ_id','=',categ1)]"/>

Tác giả

its ok for some categories , like u see I have used union in query just to make sure that I get values filtered in all type of categories therefore this approach is not accepted.

Your problem is solve ? or not ?

Tác giả

no my problem is not solved , if I use many2one the values are not filtered and if I use selection field then it will have predefined values

Tác giả

that was another scenario and it worked for some categories but my query is now working for all categories and bringing filtered products . Only problem here is how to show those values as selection or dropdown list

Tác giả

can selection field be used for dynamic values. Like I want to return values to selection field. Is that possible?

I did not get.

Tác giả

I have like 10 values returning from onchange function . They all are shown on 1 normal field which is weird . I want to use many2one or selection to have a dropdown menu . Thats it .

You can use many2one field but give widget='selection' in xml file

Bài viết liên quan Trả lời Lượt xem Hoạt động
0
thg 3 25
1496
4
thg 4 24
174348
0
thg 12 23
2256
5
thg 7 25
228395
1
thg 12 22
3381