Nash
Nash

Reputation: 1073

OpenERP - which field is getting the value from overridden name_get() function?

I hope this question makes sense. My goal is to display field as defined in name_get(). I have overridden name_get() function in mrp_bom class, code attached. However, I don't know which field will get return value from the function name_get(). Any insight is greatly appreciated!

class mrp_bom(osv.osv):
    _inherit = 'mrp.bom'
    _name = 'mrp.bom'
    _columns = {
        'x_nk_default_code': fields.related('product_id', 'default_code', 
            type='char', relation='product.product', 
            string='Part Number', store=True, 
            readonly=True),
        'x_nk_class_desc': fields.related('product_id', 'categ_id', 'name', 
            type='char', string='Class Description', 
            store=True, readonly=True),
        'x_nk_item_desc': fields.related('product_tmpl_id', 'name', 
            type='char', relation='product.template', 
            string='Item Description', store=True, 
            readonly=True),
        'categ_id': fields.related('product_id', 'categ_id', type='integer', 
            relation='product.product', string='Categ_ID', 
            store=True, readonly=True),
        'x_category_code': fields.related('product_id', 'categ_id', 
            'x_category_code', type='char', string='Class 
            Description', store=True, readonly=True),
    }


    def name_get(self, cr, user, ids, context=None):
        if context is None:
            context = {}
        if isinstance(ids, (int, long)):
            ids = [ids]
        if not len(ids):
            return []
        def _name_get(d):
            name = d.get('name','')
            code = context.get('display_default_code', True) and 
                d.get('x_category_code',False) or False
            if code:
                name = '[%s] %s' % (code,name)
            return (d['id'], name)
        result = []
        for product_category in self.browse(cr, user, ids, context=context):
            mydict = {
                'id': product_category.id,
                'name': product_category.name,
                'x_category_code': 
                product_category.x_category_code,
            }
        result.append(_name_get(mydict))
    return result

Upvotes: 1

Views: 1727

Answers (1)

Quentin THEURET
Quentin THEURET

Reputation: 1232

The name_get method is used to display value of a record in a many2one field. For example, in a sale order line, if you select a product, the value displayed in the sale order line for the field 'product_id' must be the result of the 'name_get' on the product.product object.

There is no special field to display the result of name_get. If you need to put the result of name_get method in a field of a record, you should create with an attribute 'compute' : http://odoo-new-api-guide-line.readthedocs.org/en/latest/fields.html#computed-fields

You can find more information here : http://odoo-new-api-guide-line.readthedocs.org/en/latest/environment.html?highlight=name_get

I hope this help you.

Upvotes: 3

Related Questions