1

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?

piet.t
  • 11,718
  • 21
  • 43
  • 52
GioV
  • 17
  • 11

2 Answers2

1

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")
kerbrose
  • 1,095
  • 2
  • 11
  • 22
0
_sql_constraints = [
        ('driver_unique', 'UNIQUE(driver_id, )',
         'The Driver has been already assigned to a vehicle !'),
    ]
Navi
  • 1,000
  • 1
  • 14
  • 44