Search code examples
pythonodoo-8odooodoo-10

How can I set a constraint to allow selecting 2 fields as maximum?


I have 4 fields but only 2 can be selected as maximum. If 3 fields were selected, I would need to raise a ValidationError. How can I do this? By the way, they can be selected in random order.

field1 = fields.Boolean(string='Field 1')
field2 = fields.Boolean(string='Field 2')
field3 = fields.Boolean(string='Field 3')
field4 = fields.Boolean(string='Field 4')

@api.constrains('field1', 'field2', 'field3', 'field4')
def fields_constr(self):
    if fields ...

Solution

  • Python makes it easy :)

    @api.constrains('field1', 'field2', 'field3', 'field4')
    def fields_constr(self):
        values = [self.field1, self.field2, self.field3, self.field4]
        if values.count(True) > 2:
            raise ValidationError(
                _('You can select two options as maximum.'),
            )