Passa al contenuto
Menu
È necessario essere registrati per interagire con la community.
La domanda è stata contrassegnata
5 Risposte
5699 Visualizzazioni

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)')

Avatar
Abbandona

application_data_product_template_ids is your field? in this model?

Autore

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

Risposta migliore

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....


Avatar
Abbandona
Risposta migliore

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

Avatar
Abbandona
Autore

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!!

Post correlati Risposte Visualizzazioni Attività
4
dic 23
17895
1
set 16
7564
0
mar 15
3799
0
set 24
296
1
mar 23
2459