Search code examples
constraintsodoo-10fleet

How to make a Many2One constraint in odoo 10


I'm working with Odoo 10, and I'm trying to modify the fleet module like the next image

fleet module

We need the field "Conductor" (Driver) be unique, I mean, a vehicle only can have assigned one driver and the driver can't have more than one vehicle assigned.

I used this code:

@api.constrains('driver_id')
    def _check_driver(self):
        for record in self:
            if record.driver_id in self:
                raise ValidationError("Driver already has a vehicle assigned")

but that code doesn't work. How can I solve it?


Solution

  • your could apply a domain filter in the field definition as following

    #definition on the fleet.vehicle model
    driver_id = fields.Many2one('res.partner', index=True, required=True,
        ondelete='cascade', domain=[('vehicle_id', '=', False)])
    
    #definition on the res.partner model
    vehicle_id = fields.One2many('fleet.vehicle', 'driver_id')
    

    or as following:

    @api.constrains('driver_id')
    def _check_driver(self):
        FleetVehicle = self.env['fleet.vehicle']
        for record in self:
            if record.driver_id in self:
                vehicle_count = FleetVehicle.search_count(['driver_id', '=', record.driver_id])
                if vehicle_count > 0:
                    raise ValidationError("Driver already has a vehicle assigned")