Odoo Help


How to change the values for a selection field?

Luigi Sison
on 1/12/15, 11:43 AM 9,123 views

How can I create, update or delete values for a selection field?

For example, a selection field has allowable values: value1, value2

How can I add value3?

How can I do this in the SaaS instance?

Luigi Sison
on 1/12/15, 11:53 PM

Luigi, unfortunately, AFAIK, you cannot do any of those answers in SaaS instance. You need to do some development.

on 1/13/15, 1:31 AM

You can, alternatively, create a new selection field to capture the 3rd (and 4th, etc.) selection. But it will be informational only.

on 1/13/15, 1:32 AM


| 5 3 6
Jakarta, Indonesia
On 1/12/15, 11:12 PM

There are 3 ways to provide selection list values that is accepted by OpenERP:

  1. Specifying directly in the field.selection definition: 'field_1': fields.selection([('value1', 'String 1'), ('value2', 'String 2')], 'Field Label')
  2. Specifying using a name list variable outside of the field.selection definition: 'field_1': fields.selection(LIST_VARIABLE, 'Field Label').  Where LIST_VARIABLE is defined beforehand: LIST_VARIABLE = [('value1', 'String 1'), ('value2', 'String 2')]
  3. Specifying using a method: 'field_1': fields.selection(_method_name, 'Field Label').  Where _method_name is defined beforehand:

def _method_name(self, cr, uid, context=None):

    return [('value1', 'String 1'), ('value2', 'String 2')]

Now, you need to check first which one is your current selection field is.  If it is using method No. 1, then you need to redefine it to use either method No 2 or method No 3.  If it is using method No. 2 or 3, you just need to change either the variable (you can use LIST_VARIABLE.append(('value3', 'String 3'))) to return the new value.


Atul Arvind

--Atul Arvind--
| 3 3 5
vadodara, India
--Atul Arvind--


I am odoo Enthusiast/Consultant from Baroda, Gujarat, India. Working with odoo from v5 to v9 and other opensource technology since 5+ years. Having Strong Expertise in

Requirement gathering & Gap Analysis

Odoo Development

Odoo Customization

Odoo Training

Odoo Integration

Server Administration

Odoo Migration


I am also active on StackOverflow.


Atul Arvind
On 1/13/15, 12:03 AM

Selection field allows static value in list of tuples

    registration_state = fields.Selection([('select_1', 'One'), ('select_2', 'Two'), ('select_3', 'Three')], 'Select')

in that you can not add values.

so the solutions is to add a many2one field, which allows you to add value in it.  for that you need to define a new model of your selection.

class selection_selection(models.Model):
    _name = 'selection.selection'
    name = fields.Char('Name', required=True)
    value = fields.Char('Value', required=True)
now in your class you need to add many2one field which is referencing to your selection model like,

class your_model(models.Model):

    _name = 'your.model'
    my_selection = fields.Many2one(selection.selection, Selections)
now in xml file while defining the fields you need to add a widget to your selection field like,

    <field name="my_selection" widget="selection" />

to configure the selections you can make menu under configuration as per your need.

hope this helps.

@Atul you can make selection field to have a somewhat dynamic (can be changed by other modules) list of values as I've stated in my answer. Also (and thus), the choice of using either many2one and selection fields does not only lies on the capability to add values. Further details on the differences between many2one and selection fields are elaborated in my answer here: https://www.odoo.com/forum/help-1/question/best-practices-as-to-when-to-use-fields-selection-vs-fields-many2one-69262

on 1/13/15, 12:23 AM

Obviously we can make it dynamic selection field. Thanks for the comment @Ivan.

Atul Arvind
on 1/13/15, 12:53 AM
On 1/12/15, 10:34 PM

Hi Luigi,

There are two kinds of "selection" fields, so there are two ways that the values are managed.

The one that is defined as "fields.selection(...)" [defined in the .py file, the model] has values defined there in a comma seperated list.  In this case you add the new value to the list in the .py file.

Or a field can be defined as a one to many2one(...), in which case the line that defines it in the .py file will indicate what table has the values. Usually use can add new values from the interface on this type of field.




you can use list to add item dynamically in fields.Selection

for i in range(1900,2017):

class Employee(models.Model):

    _name = 'employee.details'
    year=fields.Selection(list1, string='Years', required=True, copy=True)

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 1/12/15, 11:43 AM
Seen: 9123 times
Last updated: 1/24/17, 9:34 AM