Automated Action to prevent duplicates

As standard, Odoo does not have “uniqueness” checks on many fields. This can be problematic, for example if there are

  • multiple products with the same name (which one to choose?)
  • multiple customers or vendors with the same name

Either they are different, in which case they should be given different names, or someone has entered the same data twice.

It is possible to set a field as being unique in the Model definition, but it’s also possible to use Automated Actions.

How to do it

If you are not familiar with Automated Actions, start here

Enable Developer Mode and navigate to Settings / Technical / (Automation) / Automated Actions:

Click on CREATE and enter the following:

Model:  Product Template
Action To Do:    Execute Python Code
Trigger Condition:   On Creation & Update
Before Update Domain: Internal Reference is set
Apply on:  Match all records 

Python Code

if record.default_code:
   existing_product = env['product.template'].search([('id','!=',record.id),('default_code','=',record.default_code)])
   if existing_product:
     raise Warning("You can't have the same Internal Reference Number in Odoo twice!")

Odoo 14

There is a small change in the syntax:

raise UserError("You can't have the same Internal Reference Number in Odoo twice!")

4 thoughts on “Automated Action to prevent duplicates

  1. Hi,
    Thanks for the valued python Code, i detect one problem:
    Even with internal references that don’t exist, the program its giving me the message “You can’t have the same Internal Reference Number in Odoo twice!”
    Maybe the problem is solved with an extra line of code but I don’t have the knowledge for it

    Like

  2. I believe this technique does work, but maybe there are some special cases that need additional checking.

    Is this always happening? Or only some reference numbers?

    Like

  3. Hi,
    I’ve been looking for a solution like this for quite a long time, but the Odoo support turned me down!
    Thanks a lot for the tip.
    I tried to create the action for contacts, but I’m really too bad at Python to achieve it…
    Would you be kind enough to write the code for contacts as well ?

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s