Anyone who uses Odoo can spot that the Name column of a model like Sale or Invoice is generated automatically. In Odoo, we call it Sequence.
In this post, we will try to create a customer model and allow its name column to be auto-generated.
class MyModel(models.Model): _name = 'my.model' _description = 'My custom model' name = fields.Char(string="Name", readonly=True, select=True, copy=False, default='New') @api.model def create(self, vals): if vals.get('name', 'New') == 'New': vals['name'] = self.env['ir.sequence'].next_by_code('my.model') or 'New' result = super(MyModel, self).create(vals) return result
In the model above, we inherit create
method to override the name field with sequence value.
Next, we need to add the sequence definition to an XML file.
<record id="my_model_sequence" model="ir.sequence"> <field name="name">My Model Sequence</field> <field name="code">my.model</field> <field name="active">TRUE</field> <field name="prefix">MYMODEL-</field> <field name="padding">3</field> <field name="number_next">1</field> <field name="number_increment">1</field> </record>
After activation, a record will be created in ir.sequence model.
- name – Name of the record.
- code – Your model’s table.
- active – Determine whether the sequence is active or not.
- prefix – Prefix of the sequence.
- padding – Sequence size
- number_next – Next number that will be used
- number_increment – The next number of the sequence will be incremented by this.
With the setting above, your new model’s record is named MYMODEL-001, MYMODEL-002, MYMODEL-003, and so on.