Anyone who use Odoo can spot that Name column of model like sale, invoice are 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 defination 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 as MYMODEL-001, MYMODEL-002, MYMODEL-003, and so on.