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

I have defined this functional field so that I can get values from one2many field and display them in tree view:

    def get_product_brands(self, cr, uid, ids, fields, arg, context):

        context = context or {}

        res={}

        for record in self.browse(cr, uid, ids, context=None):

            brands = ''

            for val in record.application_data_product_template_ids

                if val.brand.name:

                    brands += "%s " % (val.brand, )

                print brands

            res[record.id] = brands and brands[:-1] or ""

        return res


my field defintion:

'brands' : fields.function(get_product_brands, method=True, string="Product brands", type='char')


But I'm getting this error:


File "/home/odoo/addons/bal_dev/balerce_dev.py", line 209, in get_product_brands_2

for record in self.browse(cr, uid, ids, context=None).application_data_product_template_ids:

File "/home/odoo/openerp/fields.py", line 755, in __get__

record.ensure_one()

File "/home/odoo/openerp/models.py", line 5219, in ensure_one

raise except_orm("ValueError", "Expected singleton: %s" % self)

except_orm: ('ValueError', 'Expected singleton: product.template(8, 4, 5, 9, 2, 3, 7)')

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

application_data_product_template_ids is your field? in this model?

Tác giả

application_data_product_template_ids, is a new one2many field in product.template model. I use this field to store brand values. What this function needs to do is to fetch all brand values stored in this new one2many field

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

Hi,

You can't use '.' operator here,

self.browse(cr, uid, ids, context=None).application_data_product_template_ids: 

because self.browse(cr, uid, ids, context=None)  contains more than one record.

you can iterate that or make sure it will receive single record

That's why you are getting -> 'ValueError', 'Expected singleton

Hope this helps....


Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

I modify your code in your post, should work, bye

Ảnh đại diện
Huỷ bỏ
Tác giả

if val.brand.name: brands += "%s " % (val.brand.name, ) words = brands.split() new_brands = ' '.join(sorted(set(words), key=words.index)) Added this, so that I can eliminate reapeted values....thanks!!

Bài viết liên quan Trả lời Lượt xem Hoạt động
4
thg 12 23
17892
1
thg 9 16
7561
0
thg 3 15
3791
0
thg 9 24
296
1
thg 3 23
2457