This question has been flagged
1 Reply
4686 Views

I am trying to learn how to write code to access field content in models of odoo.

I wrote a simple model with a test method:

class hago_product_template(models.Model):     

    _name='product.template'
    _inherit='product.template'

    @api.one   
    def _set_my_list_price(self):      
        pricelists = self.env['product.pricelist.item'].search([('product_tmpl_id', '=', self.id)])       
        for pricelist in pricelists:           
            pricelist_id = pricelist.pricelist_id           
            base_pricelist = self.env['product.pricelist'].browse(pricelist_id)       
            temp_name = base_pricelist.name  # stuck here

        self.my_list_price = pricelist_id

    my_list_price=fields.Float('Sale Price', compute="_set_my_list_price")

The code ran until the line "temp_name=...". I traced it line-by-line thru the eclipse debugger. When I execute the line temp_name = base_pricelist.name, the debugger console showed the following:

2016-05-07 09:50:51,249 26808 INFO hago openerp.sql_db: Programming error: can't adapt type 'product.pricelist', in query SELECT "product_pricelist"."name" as "name","product_pricelist"."create_date" as "create_date","product_pricelist"."currency_id" as "currency_id","product_pricelist"."write_uid" as "write_uid","product_pricelist"."id" as "id","product_pricelist"."write_date" as "write_date","product_pricelist"."company_id" as "company_id","product_pricelist"."create_uid" as "create_uid","product_pricelist"."active" as "active" FROM "product_pricelist" WHERE "product_pricelist".id IN %s ORDER BY "product_pricelist"."name"

2016-05-07 09:50:51,264 26808 WARNING hago openerp.models: Comparing apples and oranges: product.pricelist(2,) == 2 (/home/simonlee/workspace/odoo9/openerp/models.py:5621)

2016-05-07 09:50:51,277 26808 WARNING hago openerp.models: Comparing apples and oranges: product.pricelist(2,) == 3 (/home/simonlee/workspace/odoo9/openerp/models.py:5621)

2016-05-07 09:50:51,292 26808 INFO hago openerp.sql_db: Programming error: can't adapt type 'product.pricelist', in query SELECT "product_pricelist"."name" as "name","product_pricelist"."create_date" as "create_date","product_pricelist"."currency_id" as "currency_id","product_pricelist"."write_uid" as "write_uid","product_pricelist"."id" as "id","product_pricelist"."write_date" as "write_date","product_pricelist"."company_id" as "company_id","product_pricelist"."create_uid" as "create_uid","product_pricelist"."active" as "active" FROM "product_pricelist" WHERE "product_pricelist".id IN %s ORDER BY "product_pricelist"."name"

Can someone tell me what I did wrong? How I can access the content of the product.pricelist record??? Thanks

Avatar
Discard
Best Answer

HI Simon,

The reason for this error is you are passing incompatible type for browse method, instead of passing id you are passing record-set to browse method.  It visible form error description [Programming error: can't adapt type].

Make this changes :

for pricelist in pricelists:           

            pricelist_id = pricelist.pricelist_id.id           

            base_pricelist = self.env['product.pricelist'].browse(pricelist_id)       

 

now in pricelist_id there is id instead of record.

And one more thing you already got record in pricelist, so you don't have to use browse() there. You can directly get name by using pricelist.name . In new API  model fields can be read and written directly from the record, but only on singletons (single-record recordsets).

 Please refer ORM API


Hope this helps.

Avatar
Discard