Janik von Rotz

1 min read

Odoo Development: Create a smart button with a counter

Smart buttons help navigating between linked models in Odoo. Creating a smart button requires three components: counter field, compute function, view action and a button box on the view.

The examples are based on the Odoo App Certificate Planner.

We are going to add a smart button to the form view of the change model. This requires a counter field on the model. We assume that the required relational fields already exists.


from odoo import models, fields

class Change(models.Model):
    revision_count = fields.Integer(compute='_compute_revision_count')
	revision_ids = fields.One2many("certificate_planer.document_revision", "change_id", string="Document Revisions")
	def _compute_revision_count(self):
        for record in self:
            record.revision_count = len(self.revision_ids)
	def view_revision_ids(self):
        return {
            "type": "ir.actions.act_window",
            "name": "Document Revisions",
            "view_mode": "tree,form",
            "res_model": "certificate_planer.document_revision",
            "domain": [("change_id", "=", self.id)],
            "context": "{'create': False}",

So in order to have a smart button four things are required:

  1. counter field
  2. relation field to count
  3. count compute function
  4. view action for the smart button

The change on the form view simple.



  <record model="ir.ui.view" id="change_form">
    <field name="name">Change Form</field>
    <field name="model">certificate_planer.change</field>
    <field name="arch" type="xml">
      <form string="Change Form">
          <div class="oe_button_box" name="button_box">
            <button name="view_revision_ids" type="object" class="oe_stat_button" icon="fa-files-o">
              <field string="Document Revisions" name="revision_count" widget="statinfo"/>


Simply add the button box div after <sheet> tag. The result in this case is:


Categories: Odoo
Tags: odoo , development , tutorial
Improve this page
Show statistic for this page