Skip to main content

Odoo/OpenERP : _rec_name and name_get()

_rec_name = ‘name’ (by default) 

where ‘name’ is field of the model. If ‘name’ field is not there then you have to assign any other filed name to this ‘_rec_name’ variable from columns.

Note : If ‘name’ field is there in your columns then there is no need to specify '_rec_name'.

Let’s try to dig more using an example.


Case I:


If you are having hr.employee module with name field and you are using it as reference in other module, say hr.employee.detail to provide other employee details then you will use it as:

'employee_id' : fields.many2one('hr.employee', 'Employee')

and it will show you the employee name in selection list.

But, In a company, more than one employee can share the same name. So name field can’t be used to differentiate them from each other. But, employee code will be unique for each employee. In such cases, we will take a column field like ‘emp_code’ and will assign it to ‘_rec_name’

_rec_name = ‘emp_code’

So that it can show employee code in dropdown instead of employee name.

Note : In both above cases 'id' will only be store in database. If will affect only the display part.


Case II: 


In same above example if your manager asks you to show combination of both i.e Employee Name, Employee Code what you will do?

In this case we will override name_get() method in hr.employee module

def name_get(self, cr, uid, ids, context={}):
         
        if not len(ids):
            return []

        res=[]

        for emp in self.browse(cr, uid, ids,context=context):
   res.append((emp.id, emp.name + ', ' + emp.emp_code))    

        return res

and it will display combination of both in drop-down.


Thanks!!!!!!!!!! Enjoy Programming :)


Comments

  1. Hi overridden the name_get() method and i am showing the combination of emp name and code in the many2one dropdown. now the thing is i want to search the emp with emp code . If i try to search with emp name all names are listing but if i try to search with emp code it is showing create button to create the record. Please give me the solution for this.

    Thanks in advance.

    ReplyDelete
    Replies
    1. For searching, we created a stored computed field called 'display_name'. Then set it as the 'rec_name'.
      Benefit of searching both name and code at once.

      Delete
  2. I think you have to set just

    _rec_name = ‘emp_code’

    as well.

    ReplyDelete
    Replies
    1. Please share me , How to use _rec_name . I don`t understand

      Delete
  3. Hi,
    do you have any idea how to solve this?
    http://stackoverflow.com/questions/31038103/odoo-8-howto-add-product-template-attribute-to-product-product-name-get
    It's a similar occasion...

    ReplyDelete
  4. somewhat same problem as thomas, not able to search (all hierarchy are listed)
    def name_get(self, cr, uid, ids, context=None):
    if not ids:
    return []

    self._rec_name = 'hierarchy'

    res = []
    obj = self.pool.get('soldier2ndlife.product.categories')
    ids = obj.search(cr, uid, [('hierarchy', '!=', '')], context=context)

    for r in self.read(cr, uid, ids, ['id', 'hierarchy'], context):
    res.append((r['id'], r['hierarchy'])) # append the tuple in the list res

    return res

    ReplyDelete
  5. Hi Friends,
    I have another doubt here.I want to know the way to find which field is applied in _rec_name in the particular model.

    I have taken that model id from ir.model table and also I could find all the fields list created in that model through ir.model.fields table.But I could not find which field is used in _rec_name?

    Could you please help me?

    ReplyDelete

Post a Comment

Thanks for your valuable comments.

Popular posts from this blog

Odoo/OpenERP: one2one relational field example

one2one relational field is deprecated in OpenERP version>5 but you can achieve the same using many2one relational field. You can achieve it in following two ways : 1) using many2one field in both the objects ( http://tutorialopenerp.wordpress.com/2014/04/23/one2one/ ) 2)  using inheritance by deligation You can easily find the first solution with little search over internet so let's start with 2nd solution. Scenario :  I want to create a one2one relation between two objects of openerp hr.employee and hr.employee.medical.details What I should do  i. Add _inherits section in hr_employee class ii. Add field medical_detail_id in hr_employee class class hr_employee(osv.osv):     _name = 'hr.employee'     _inherits = {' hr.employee.medical.details ': "medical_detail_id"}     _inherit = 'hr.employee'         _columns = {              'emp_code':fields.char('Employee Code', si

How to draw Dynamic Line or Timeseries Chart in Java using jfreechart library?

Today we are going to write a code to draw a dynamic timeseries-cum-line chart in java.   The only difference between simple and dynamic chart is that a dynamic event is used to create a new series and update the graph. In out example we are using timer which automatically calls a funtion after every 1/4 th second and graph is updated with random data. Let's try with the code : Note : I had tried my best to provide complete documentation along with code. If at any time anyone have any doubt or question please post in comments section. DynamicLineAndTimeSeriesChart.java import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.plot.XYPlot; import

Odoo: Download Binary File in v10

To download any binary file in Odoo10 following is the link: http://127.0.0.1:8069/web/content?model=<module_name>&field=<field_name>&filename_field=<field_filename>&id=<object_id> module_name    - the name of the model with the Binary field field_name         - the name of the Binary field object_id            - id of the record containing particular file. field_filename    - name of a Char field containing file's name (optional). So if you want to call a function on button click and download the file, code is as follow: file_url = "http://127.0.0.1:8069/web/content?model=<module_name>&field=<field_name>&filename_field=<field_filename>&id=<object_id>" return {     'type': 'ir.actions.act_url',     'url': file_url,     'target': 'new' } In Reports or web page, you can use it as: <t t-foreach="files&qu