Как сделать ограничение Many2One в odoo 10
Я работаю с Odoo 10, и я пытаюсь изменить модуль флота, как на следующем изображении
Нам нужно, чтобы поле "Проводник" (Водитель) было уникальным, я имею в виду, что для транспортного средства может быть назначен только один водитель, и водителю не может быть назначено более одного транспортного средства.
Я использовал этот код:
@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")
но этот код не работает. Как я могу решить это?
2 ответа
Решение
Вы можете применить фильтр домена в определении поля следующим образом
#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')
или как следующее:
@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")
_sql_constraints = [
('driver_unique', 'UNIQUE(driver_id, )',
'The Driver has been already assigned to a vehicle !'),
]